getResourceAsStream()在jar中返回null但在eclipse中很好
我有一个使用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中
– – 核心
——– TextureLoader
—- RES
——–什锦图像文件
——– ResPlaceholder
这与eclipse中的包相同。
如果你有任何帮助,我会很感激,我已经坚持了好几天没有进展。
编辑:
META-INF / MANIFEST.MF
Main.class配置/
配置/ Images.class
核心/
核心/ LevelLoader.class
核心/ TextureHelper.class
核心/ TileSet.class
– 解除与此无关的其他一些事情 –
RES /
RES / ResPlaceholder.class
RES / BlankImg.png
RES /的test.txt
RES / testImg.png
RES / testTiles.png
如果路径String类似于: /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的图像资源并将其显示在选项窗格中,就像我上面的小代码一样。 我会尽量避免长线,而是将每一步分开在自己的线上,再次类似于我上面的post。 这样,如果抛出exception,该行上的代码将更多地提供有关导致错误的信息。