我有一个javafx项目,它包含多个图像和文本文件路径:
private Image imgMan = new Image(getClass().getResource("../man.gif").toExternalForm());
FileHelper.resetScores("./bin/application/MAP/BestScores.txt");
...
当我从eclipse启动时,它可以正常工作,并且可以毫无问题地访问图像和文件。
但是当我尝试将项目导出到jar文件时,它会正确导出,但它不会启动!
我尝试从cmd启动它,堆栈的痕迹说他不知道路径......
引起:java.lang.NullPointerException 在application.Client。(Client.java:31)
(我的代码中的第31行引用了问题中给出的第一行代码)
我尝试创建一个资源文件夹并将所有文件放入其中,但没有结果。
那么最好的方法是什么? 我必须在哪里创建资源文件夹? 以及如何从代码中访问文件?
谢谢
答案 0 :(得分:1)
你应该检查几件事:
首先,它取决于你如何建立你的jar:
bin
,除非您使用m2e。如果您使用 Extract runnable JAR (来自 File> Export 菜单),它可能会忽略某些资源。 src/main/resources
。 对于第二点,您应该使用一种方法,该方法应该在委派给Image之前检查资源是否存在。虽然它不会改变你的核心问题,但你会有一个不那么微妙的错误:
static javafx.scene.image.Image loadImage(Class<?> source, String path) {
final InputStream is = source.getResourceAsStream(path);
if (null == is) {
throw new IllegalStateException("Could not load image from " + source + " path: " + path);
}
try (is) { // Java 9 -> you may want to use InputStream is2 = is
return new javafx.scene.image.Image(is); // use is2 for Java < 9
}
}
您还应尝试使用绝对路径(来自jar的根目录,或者如果使用maven则使用src/main/resources
):
Image image = loadImage(this.getClass(), "/images/man.gif");