4

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

- - 核

--------纹理加载器

----res

-------- 各种图像文件

-------- ResPlaceholder

这和eclipse中的包是一样的。

您的任何帮助将不胜感激,我已经坚持了好几天没有进展。

编辑:

元信息/清单.MF

Main.class 配置/

配置/Images.class

核/

核心/LevelLoader.class

核心/TextureHelper.class

核心/TileSet.class

-跳过与此无关的其他内容-

资源/

res/ResPlaceholder.class

res/BlankImg.png

res/test.txt

res/testImg.png

res/testTiles.png

4

1 回答 1

3

如果路径字符串类似于:/res/testImg.png它应该可以工作。

IE,

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);

顺便说一句,在小型测试程序中测试问题和检查新概念总是好的。在您的情况下,我将创建一个简单的小程序,其中仅包含一个 main 方法,该方法尝试提取 jar 的图像资源并将其显示在选项窗格中,就像我上面的小代码一样。我会尽量避免排长队,而是将每一步分开单独一行,再次类似于我上面的帖子。这样,如果抛出异常,该行的代码将提供更多关于导致错误的信息。

于 2013-07-17T02:53:16.783 回答