我用 jar 命令将图片文件(jpg文件)打包。结果用 java -jar 命令运行打包文件时出现 NullPointerException 异常,请问这是什么原因?如何解决?

解决方案 »

  1.   

    搜索一下 Fat jar 吧。如果你的程序测试的时候没问题,用这个打包 就不会有问题了。另外,你这样描述问题,很难回答
      

  2.   

    以下内容从网上摘抄:以下是一个小工具MSNHistoryCombiner中用到的一段代码,可以从jar中装载图片和文本信息。譬如,你的jar中根目录下有个img目录,里面放有一些图片,如img1.jpg,你可以这样调用:Utilities.getImageFromJar("/img/img1.jpg", YourClass.class); 注意必须这里是“/img/img1.jpg”而非“img/img1.jpg”。从jar中读文本资源也是类似方法调用getTextFromJar。
    import java.awt.Image;   
    import java.awt.Toolkit;   
    import java.io.*;   
      
    public class ResourseReader   
    {   
      
        public ResourseReader()   
        {   
        }   
      
        public static Image getImageFromJar(String s, Class class1)   
        {   
            Image image = null;   
            InputStream inputstream = class1.getResourceAsStream(s);   
            if(inputstream != null)   
            {   
                ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();   
                try  
                {   
                    byte abyte0[] = new byte[1024];   
                    for(int i = 0; (i = inputstream.read(abyte0)) >= 0; )   
                    {   
                        bytearrayoutputstream.write(abyte0, 0, i);   
                    }   
      
                    image = Toolkit.getDefaultToolkit().createImage(bytearrayoutputstream.toByteArray());   
                }   
                catch(IOException ioexception)   
                {   
                    ioexception.printStackTrace();   
                }   
            }   
            return image;   
        }   
      
        public static String getTextFromJar(String s, Class class1)   
        {   
            String s1 = "";   
            InputStream inputstream = class1.getResourceAsStream(s);   
            if(inputstream != null)   
            {   
                BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(inputstream));   
                String s2;   
                try  
                {   
                    while((s2 = bufferedreader.readLine()) != null)   
                    {   
                        s1 = s1 + s2 + "\n";   
                    }   
                }   
                catch(IOException ioexception)   
                {   
                    ioexception.printStackTrace();   
                }   
            }   
            return s1;   
        }   
    }   
      

  3.   

    那有可能是LZ未把所有的class打包进去 
    也可能是路径问题
      

  4.   

    manifest 文件包含进去了吗?
      

  5.   

    同意楼上的,必须包含manifest文件,在这个文件里定义Main class作为启动的类。
    java交流群,欢迎大家进来!!! 群号:55919698