自己发现的,异常事类型转化的错误,但是好像不事出在那里。其中异常抛出事在一下源代码的
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;
    }

解决方案 »

  1.   

    是不是你传递的FormFile source路径不对?
      

  2.   

    java.lang.ClassCastException: java.lang.NoClassDefFoundError看错误,你的linux环境缺少了某个jar,或者对应的jar版本不匹配。
    造成找不到转化的类。
    逐个核对支持类库,去掉重复的,只保留最新的。
      

  3.   

    估计你linux没有安装X,可以试一下这个方法,在tomcat启动脚本中加入参数:-Djava.awt.headless=true
      

  4.   

    FormFile 传的是对象,跟路径没有关系。至于jar下的文件,比较了一下,该有的类都有,只事没看里面的方法是否存在。
      

  5.   

    如果服务器的tomcat和jdk等版本于你本机的一样,那估计应该是你的路径问题。
      

  6.   

    1:将jdk升级为jdk1.4,然后在java命令后加上运行参数   –Djava.awt.headless=true   即可,java   xxxx.class   -Djava.awt.headless=true   。    
      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"