【问题标题】:NullPointerException when Jar file executes. Nothing works执行 Jar 文件时出现 NullPointerException。没有任何效果
【发布时间】:2018-10-10 10:15:03
【问题描述】:

我觉得我已经尝试了一切。这些是我尝试过的代码的一些示例,它们在 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 内部,所有这些。在罐子里……没有。

现在有人向我开枪。

【问题讨论】:

  • 你用什么工具来生成jar文件?
  • 问题已编辑并删除。最好显示更多相关信息,包括(如果需要)类的可视化结构、堆栈跟踪、错误行、minimal reproducible example
  • 您能否分享堆栈跟踪或错误,这可能真的有助于解决您的问题。
  • @HovercraftFullOfEels 您知道,现有问题中列出的解决方案与我上面列出的尝试完全相同。
  • @BadshahTracker 与清单文件无关。

标签: java jar nullpointerexception getresource null-pointer


【解决方案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" ) );

这做出了同样的假设。

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

【讨论】:

  • 你错过了对话。每个文件都位于 Jar 文件的根目录中(使用 WinRar 打开)。 C3.png 与调用 getResource() 的 VP2CPConverter.class 位于同一位置。我不必假设,因为我可以在那里看到图像。但是由于某种原因,该类看不到任何可用的资源。
  • @mfgravesjr:您还没有按照您的要求发布您的 jar 文件结构的 图像。如果图像在 jar 的 root 中,那就是你的问题,你必须移动它们,因为重复项会告诉你。
  • 我什么都没错过。你的代码行为证明你声称的不是真的。
  • @EJP 如果您不相信我自己的问题,那是您的问题,您将毫无帮助。 jar文件根目录内的目录和文件列表为:
  • META-INF,C3.png,D3.png,E3.png,F3.png,G3.png,A3.png,B.png,C4.png,D4.png,E4。 png, F4.png, G4.png, A4.png, B4.png, C5.png, D5.png, E5.png, F5.png, G5.png, A5.png, B5.png, C6.png, D6.png、E6.png、F6.png、G6.png、A6.png、B6.png、C7.png、D7.png、E7.png、F7.png、G7.png、A7.png、B7。 png, C8.png, C3#.png, D3#.png, F3#.png, G3#.png, A3#.png, C4#.png, D4#.png, F4#.png, G4#.png , A4#.png, C5#.png, D5#.png, F5#.png, G5#.png, A5#.png, C6#.png, D6#.png, F6#.png, G6#.png , A6#.png, B6#.png, C7#.png, D7#.png, E7#.png, F7#.png...
猜你喜欢
  • 2011-11-14
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2017-09-07
  • 1970-01-01
  • 2019-04-25
  • 2015-02-09
  • 1970-01-01
相关资源
最近更新 更多