java - getResourceAsStream() 在 jar 中返回 null 但在 eclipse 中正常

标签 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

----核心

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

----资源

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

-------- 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/

相关文章:

java - 如何在 OpenGL 中渲染具有不同颜色侧面的立方体?

java - ARCore – 如何在没有任何特征点的情况下在墙壁等表面上放置/创建对象?

JavaFX:将 MapView 添加到 VBox

android - res/drawable中有很多图片文件,Android中如何访问?

c# - 在整个循环完成之前,标签文本不会更新

css - 使用伪元素的 content 属性改变 img

java - 加载纹理 LWJGL

java - 统一变量报告未找到 LWJGL 3

java - 无法计算出预序遍历

java - Android studio 3.1 无法识别 jar 注释处理