Jar文件执行时出现NullPointerException。什么都行不通

时间:2018-04-30 10:17:58

标签: java jar nullpointerexception getresource null-pointer

我觉得我已经尝试了一切。这些是我尝试过的代码中的一些示例,它们在IDE中运行得非常好,但是只要它打包在一个jar文件中,就会崩溃。每个文件都在同一级别并打包在jar文件中。我用WinRar打开它,看到图像“c3.png”完全位于我的Main-Class旁边,在Jar的根目录中。

C3 = new ImageIcon( getClass().getResource("c3.png") );

C3 = new ImageIcon( this.getClass().getResource("c3.png") );

C3 = new ImageIcon( ImageIO.read( getClass().getResource("c3.png") );

C3 = new ImageIcon( ImageIO.read( ClassLoader.getSystemClassLoader().getResourceAsStream( "c3.png" ) ) );

C3 = new ImageIcon( ImageIO.read( getClass().getClassLoader().getResource( "C3.png" ) ) );

编辑:我已经尝试了一些......当然......失败了。

C3 = new ImageIcon(VP2CPConverter.class.getResource("/C3.png"));

C3 = new ImageIcon( VP2CPConverter.class.getClassLoader().getResource( "C3.png" ) );

在简短的故障排除尝试中,我甚至尝试使用getResourceAsStream()来查找Jar执行时可用的所有资源。在IDE内部,所有这些。在罐子里......没有。

现在有人开枪了。

1 个答案:

答案 0 :(得分:1)

C3 = new ImageIcon( getClass().getResource("c3.png") );
C3 = new ImageIcon( this.getClass().getResource("c3.png") );

这两个是相同的,并假设资源存在于当前类的包名称所表示的文件夹中。显然它不是。

C3 = new ImageIcon( ImageIO.read( getClass().getResource("c3.png") );

这是相同的假设。

C3 = new ImageIcon( ImageIO.read( ClassLoader.getSystemClassLoader().getResourceAsStream( "c3.png" ) ) );

这假设资源存在于JAR文件的根文件夹中。显然它不是。

C3 = new ImageIcon( ImageIO.read( getClass().getClassLoader().getResource( "C3.png" ) ) );

这是相同的假设。

C3 = new ImageIcon(VP2CPConverter.class.getResource("/C3.png"));

这是相同的假设。

C3 = new ImageIcon( VP2CPConverter.class.getClassLoader().getResource( "C3.png" ) );

这是相同的假设。

显然,上述所有假设都是错误的。因此,将其中一个设为true,并使用相应的代码来假定它。如果要通过当前类获取资源,请将其放入当前类的包中。如果您想通过类加载器或从/开始的路径获取它,请将其放入JAR文件的根目录。