getResourceAsStream()在jar中返回null但在eclipse中很好

时间:2013-07-17 02:14:09

标签: java image lwjgl embedded-resource

我有一个使用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 config /

config / Images.class

core /

core / LevelLoader.class

core / TextureHelper.class

core / TileSet.class

- 解决其他一些与此无关的事情 -

res /

res / ResPlaceholder.class

res / BlankImg.png

res / test.txt

res / testImg.png

RES / testTiles.png

1 个答案:

答案 0 :(得分:3)

如果路径字符串类似于:/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的图像资源并将其显示在选项窗格中,就像我上面的小代码一样。我会尽量避免长线,而是将每一步分开在自己的线上,再次类似于我上面的帖子。这样,如果抛出异常,该行上的代码将更多地提供有关导致错误的信息。