正在 jar 中加载 images/files

Loading images/files inside jar

这个问题已经有很多答案了。我也尝试了很多。我还没有找到解决方案。

我在我的项目中加载了一些图像 (Swing - ImageIcons)。在 运行 对话框中,所有这些也都显示在我的 GUI 中。但是编译后程序根本无法启动。错误消息因程序而异。

最后,我尝试简单地加载一个 File 来打印绝对路径。然后看起来像这样:

File f = new File(Loadscreen.class.getResource("../../../../resources/materials/icon.png").getFile());
System.out.println(f.getAbsolutePath());

控制台returns一个NullPointerException为此:

控制台编译:

Exception in thread "main" java.lang.NullPointerException
        at de.franken.ration.gui.Loadscreen.<init>(Loadscreen.java:43)
        at de.franken.ration.Rationboard.onEnable(Rationboard.java:84)
        at de.franken.ration.Rationboard.main(Rationboard.java:75)

控制台 Eclipse:

H:\Users\Hinrich\Documents\Java\Rationboard\bin\resources\materials\icon.png

在第 43 行我定义了 f.

我的树看起来像这样:

Rationsboard
L_ src
  L_ de
    L_ franken
      L_ ration
        L_ gui
          L_ Loadscreen.class
  L_ resources
    L_ materials
      L_ icon.png

但是,该图标包含在 JAR 中。

感谢所有回复的人。

//编辑: 我又玩了一会儿。只要要加载的资源在同一个包中,就可以加载。但是,如果我使用 ../ 更改包,则会出现 NullPointerException

作为第一步,您可以通过 运行 jar -tf file.jar 验证图标是否包含在 jar 中。

你试过了吗

File f = new File(Loadscreen.class.getResource("/materials/icon.png").getFile()); System.out.println(f.getAbsolutePath());

假设 icon.pngresources/materials 文件夹中?

使用:

this.getClass().getResource("/resources/materials/icon.png"); 

请注意两个问题中所见方法的差异:

  1. this.getClass() 将找到适合应用程序资源的上下文 class 加载程序。
  2. "/resources/materials/icon.png" 前导 / 将告诉 getResource 方法从 class-path 或 Jar.
  3. 的根目录开始搜索

顺便说一句: 任何时候都不要涉及文件。 getResource returns Jar 中的 URL 和资源无法作为 File 对象访问。