【问题标题】:getResourceAsStream() returning null in jar but fine in eclipsegetResourceAsStream() 在 jar 中返回 null 但在 eclipse 中很好
【发布时间】:2013-07-15 10:14:30
【问题描述】:

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

Main.class 配置/

配置/Images.class

核心/

核心/LevelLoader.class

核心/TextureHelper.class

core/TileSet.class

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

分辨率/

res/ResPlaceholder.class

res/BlankImg.png

res/test.txt

res/testImg.png

res/testTiles.png

【问题讨论】:

  • 您能否展示一张 Eclipse 包资源管理器的小图,以准确显示纹理资源相对于类文件的位置?或者更好的是,向我们展示您使用jar tf myJarFile.jar的结果
  • 作为一个实验,看看你是否使用getResource(texture).. 获得了一个有效的 URL。
  • Andrew Thompson,我很困惑我将使用 URL 做什么。这不是一个小程序,它只是一个标准文件。满载鳗鱼的气垫船,我马上就去,就一点点。
  • @HovercraftFullOfEels,这里是相关文件:imgur.com/VGPvNso
  • @Keon:请把jar tf myJar.jar返回的信息贴在这里。

标签: java image lwjgl embedded-resource


【解决方案1】:

如果路径字符串类似于:/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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 2023-03-31
    • 2015-02-19
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多