我有一个使用 LWJGL 的 Java 程序。它在 Eclipse 中运行良好,但是当我尝试将它编译为 jar 文件时它崩溃了,给我一个 NullPointerException。以前有人问过,我知道,但我似乎没有得到有效的答案。这里有什么帮助吗?提前致谢!
似乎有问题的是 TextureHelper 类:
public class TextureHelper {
public static Texture LoadTexture(String texture)
{
try {
return TextureLoader.getTexture("PNG", ResPlaceholder.class.getResourceAsStream(texture));
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
一些注意事项:
我也尝试过“/res/”+纹理,以及许多其他类似的东西。
ResPlaceholder 是一个位于我存储所有图像的 res 文件夹中的类。这是一个空白的空类。
这在 Eclipse 中完美运行。
我的 jar 有这些文件夹(仅作为示例):
foo.jar
----核心
--------纹理加载器
----资源
-------- 各种图像文件
-------- ResPlaceholder
这和eclipse中的包是一样的。
如果您能提供任何帮助,我们将不胜感激,我已经坚持了好几天没有任何进展。
编辑:
META-INF/MANIFEST.MF
主类配置/
配置/Images.class
核心/
核心/LevelLoader.class
核心/TextureHelper.class
核心/TileSet.class
-跳过一些与此无关的其他内容-
资源/
res/ResPlaceholder.类
res/空白图片.png
res/测试.txt
res/testImg.png
res/testTiles.png
最佳答案
如果路径字符串类似于:/res/testImg.png
,它应该可以工作。
即,
String resourcePath = "/res/testImg.png";
InputStream inStream = ResPlaceholder.class.getResourceAsStream(resourcePath );
BufferedImage img = ImageIO.read(inStream);
// use the img BufferedImage here
// for example:
ImageIcon icon = new ImageIcon(img);
JOptionPane.showMessageDialog(null, icon);
顺便说一句,在小型测试程序中测试问题和检查新概念总是好的。在你的情况下,我会创建一个简单的小程序,它只有一个主要方法,它试图提取 jar 的图像资源并将其显示在选项 Pane 中,就像我上面的小代码一样。我会尽量避免排长队,而是将每个步骤单独放在一行上,这也类似于我上面的帖子。这样,如果抛出异常,行中的代码将提供更多关于导致错误的原因的信息。
关于java - getResourceAsStream() 在 jar 中返回 null 但在 eclipse 中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17689973/