正在 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.png
在 resources/materials
文件夹中?
使用:
this.getClass().getResource("/resources/materials/icon.png");
请注意两个问题中所见方法的差异:
this.getClass()
将找到适合应用程序资源的上下文 class 加载程序。
"/resources/materials/icon.png"
前导 /
将告诉 getResource
方法从 class-path 或 Jar. 的根目录开始搜索
顺便说一句: 任何时候都不要涉及文件。 getResource
returns Jar 中的 URL
和资源无法作为 File
对象访问。
这个问题已经有很多答案了。我也尝试了很多。我还没有找到解决方案。
我在我的项目中加载了一些图像 (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.png
在 resources/materials
文件夹中?
使用:
this.getClass().getResource("/resources/materials/icon.png");
请注意两个问题中所见方法的差异:
this.getClass()
将找到适合应用程序资源的上下文 class 加载程序。"/resources/materials/icon.png"
前导/
将告诉getResource
方法从 class-path 或 Jar. 的根目录开始搜索
顺便说一句: 任何时候都不要涉及文件。 getResource
returns Jar 中的 URL
和资源无法作为 File
对象访问。