自己发现的,异常事类型转化的错误,但是好像不事出在那里。其中异常抛出事在一下源代码的
Toolkit kit = Toolkit.getDefaultToolkit();
行。
Toolkit 是java.awt.*中的类。
个人觉得没道理找不到Toolkit类。如果找到了,调用自己的方法怎么会抛异常呢?
虽然上面贴出了后台抛异常的代码,但是我觉得那个只能做参考,好像不应是上面问题抛出来的真正异常。private static Image getBMPImage(FormFile source) throws Exception { InputStream fs = null;
Image image = null;
try {
// fs = new FileInputStream(source);
fs = source.getInputStream();
int bfLen = 14;
byte bf[] = new byte[bfLen];
fs.read(bf, 0, bfLen); // 读取14字节BMP文件头
int biLen = 40;
byte bi[] = new byte[biLen];
fs.read(bi, 0, biLen); // 读取40字节BMP信息头
// 源图宽度
int nWidth = (((int)bi[7]&0xff)<<24) | (((int)bi[6]&0xff)<<16) | (((int)bi[5]&0xff)<<8) | (int)bi[4]&0xff;
// 源图高度
int nHeight = (((int)bi[11]&0xff)<<24) | (((int)bi[10]&0xff)<<16) | (((int)bi[9]&0xff)<<8) | (int)bi[8]&0xff;
// 位数
int nBitCount = (((int)bi[15]&0xff)<<8) | (int)bi[14]&0xff;
// 源图大小
int nSizeImage = (((int)bi[23]&0xff)<<24) | (((int)bi[22]&0xff)<<16) | (((int)bi[21]&0xff)<<8) | (int)bi[20]&0xff;
// 图片文件大小
int nsize = (((int)bf[5]&0xff)<<24) | (((int)bf[4]&0xff)<<16) | (((int)bf[3]&0xff)<<8) | (int)bf[2]&0xff;
// 因为有时nSizeImage取出来的值有不对的时候,因为还没有查明原因,所以暂时这样矫正一下
nSizeImage = nsize - 54;
// 对24位BMP进行解析
if (nBitCount == 24) {
int nPad = (nSizeImage / nHeight) - nWidth * 3;
int nData[] = new int[nHeight * nWidth];
byte bRGB[] = new byte[(nWidth + nPad) * 3 * nHeight];
fs.read(bRGB, 0, (nWidth + nPad) * 3 * nHeight);
int nIndex = 0;
for (int j = 0; j < nHeight; j++) {
for (int i = 0; i < nWidth; i++) {
nData[nWidth * (nHeight - j - 1) + i] = (255 & 0xff) << 24
| (((int) bRGB[nIndex + 2] & 0xff) << 16)
| (((int) bRGB[nIndex + 1] & 0xff) << 8)
| (int) bRGB[nIndex] & 0xff;
nIndex += 3;
}
nIndex += nPad;
}
Toolkit kit = Toolkit.getDefaultToolkit();
image = kit.createImage(new MemoryImageSource(nWidth, nHeight, nData, 0, nWidth));
}
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
} finally {
if (fs != null) {
fs.close();
}
}
return image;
}
Toolkit kit = Toolkit.getDefaultToolkit();
行。
Toolkit 是java.awt.*中的类。
个人觉得没道理找不到Toolkit类。如果找到了,调用自己的方法怎么会抛异常呢?
虽然上面贴出了后台抛异常的代码,但是我觉得那个只能做参考,好像不应是上面问题抛出来的真正异常。private static Image getBMPImage(FormFile source) throws Exception { InputStream fs = null;
Image image = null;
try {
// fs = new FileInputStream(source);
fs = source.getInputStream();
int bfLen = 14;
byte bf[] = new byte[bfLen];
fs.read(bf, 0, bfLen); // 读取14字节BMP文件头
int biLen = 40;
byte bi[] = new byte[biLen];
fs.read(bi, 0, biLen); // 读取40字节BMP信息头
// 源图宽度
int nWidth = (((int)bi[7]&0xff)<<24) | (((int)bi[6]&0xff)<<16) | (((int)bi[5]&0xff)<<8) | (int)bi[4]&0xff;
// 源图高度
int nHeight = (((int)bi[11]&0xff)<<24) | (((int)bi[10]&0xff)<<16) | (((int)bi[9]&0xff)<<8) | (int)bi[8]&0xff;
// 位数
int nBitCount = (((int)bi[15]&0xff)<<8) | (int)bi[14]&0xff;
// 源图大小
int nSizeImage = (((int)bi[23]&0xff)<<24) | (((int)bi[22]&0xff)<<16) | (((int)bi[21]&0xff)<<8) | (int)bi[20]&0xff;
// 图片文件大小
int nsize = (((int)bf[5]&0xff)<<24) | (((int)bf[4]&0xff)<<16) | (((int)bf[3]&0xff)<<8) | (int)bf[2]&0xff;
// 因为有时nSizeImage取出来的值有不对的时候,因为还没有查明原因,所以暂时这样矫正一下
nSizeImage = nsize - 54;
// 对24位BMP进行解析
if (nBitCount == 24) {
int nPad = (nSizeImage / nHeight) - nWidth * 3;
int nData[] = new int[nHeight * nWidth];
byte bRGB[] = new byte[(nWidth + nPad) * 3 * nHeight];
fs.read(bRGB, 0, (nWidth + nPad) * 3 * nHeight);
int nIndex = 0;
for (int j = 0; j < nHeight; j++) {
for (int i = 0; i < nWidth; i++) {
nData[nWidth * (nHeight - j - 1) + i] = (255 & 0xff) << 24
| (((int) bRGB[nIndex + 2] & 0xff) << 16)
| (((int) bRGB[nIndex + 1] & 0xff) << 8)
| (int) bRGB[nIndex] & 0xff;
nIndex += 3;
}
nIndex += nPad;
}
Toolkit kit = Toolkit.getDefaultToolkit();
image = kit.createImage(new MemoryImageSource(nWidth, nHeight, nData, 0, nWidth));
}
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
} finally {
if (fs != null) {
fs.close();
}
}
return image;
}
解决方案 »
- Freemarker导出Word文档问题
- jar包都导了为什么还是报错呢。求解答
- html脚本存入oracle 数据库 报错!!急
- WebLogic APPC tool invocation errors.这个错误如何解决?
- Webwork中result传递多个值的问题
- 高手看过来:怎么在.jsp.html 页面画一个 calendar ?(随当前的月份而变化) 并且点击上面的数字得到值并提交?
- Hibernate中的Middlegen工具使用中出现了问题。
- struts 如何实现嵌套循环?
- weblogic 中datasource和 tx data source有什么区别?
- SQLite 总是报no such table
- webservice 自定义类型数组 的问题
- 如何判断图片的链接的网页点击后被完成打开了
造成找不到转化的类。
逐个核对支持类库,去掉重复的,只保留最新的。
2:虚拟一个图形环境。一般在linux下使用Xvfb来虚拟一个图形环境,在linux命令行键入Xvfb :0 -screen 0 1024x768x16 & ,
不过在使用之前要对Xvfb进行设置。我在本机上没有调试成功。各位可以试一下。
3:使用第三方工具包。可以使用 pja包,下载地址 http://www.eteks.com/pja/en/#Download ,使用方法见解决方案。
解决方案:将pja.jar ,pjatools.jar拷贝到weblogic的lib目录下,在startWebLogic.sh中将这两个文件加入到CLASSPATH中,
然后将以下文字加入到$JAVACMD中,其中
/usr/java/jdk1.3.1_06 是指java的安装目录
/home/weblogic/wlserver6.1/lib 是指 pja.jar ,pjatools.jar的存放目录
-Xbootclasspath/a:/usr/java/jdk1.3.1_06/lib/rt.jar:/home/weblogic/wlserver6.1/lib/pja.jar -Djava.awt.toolkit=com.eteks.awt.PJAToolkit -Djava.awt.graphicsenv=com.eteks.java2d.PJAGraphicsEnvironment -Djava.awt.fonts=/usr/java/jdk1.3.1_06/jre/lib/fonts
添加后执行会出现一些说 font找不到的提示,不用理他。
在servlet中也是可以使用-Djava.awt.headless=true 的。要针对不同的jsp服务器进行设置。
如果使用weblogic的话,在Weblogic启动脚本中的$JAVACMD $JAVA_OPTIONS
后面加入-Djava.awt.headless=true
就可以了。几乎所有的中间件服务器都是使用java编写的,服务器启动时就是需要运行java的。
tomcat 也试过,没有问题。果使用weblogic的话,在Weblogic启动脚本中的$JAVACMD $JAVA_OPTIONS
后面加入-Djava.awt.headless=true
or
if u use tomcat add the same line into the "startup.bat"