我编写了一个在IntelliJ中运行时运行正常的程序。
我创建了工件,所以我也可以从可执行jar运行它,但它不起作用。
我的应用程序的GUI根本没有出现。我从命令行运行jar,我得到IllegalStateException: Location is not set
,这可能是由这个类引起的:
public class SingleIcon extends AnchorPane {
public SingleIcon() {
System.out.println(getClass().getResource("../resources/fxml/SingleIcon.fxml"));
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("../resources/fxml/SingleIcon.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException exception) {
throw new RuntimeException(exception);
}
}
@FXML private void initialize() {}
}
在程序初始化期间多次创建SingleIcon。
System.out.println()
行多次给我这条线:
file:/C:/Users/Patryk/IdeaProjects/Battleships/out/production/Battleships/battleships/resources/fxml/SingleIcon.fxml
从命令行运行jar (java -jar app.jar)
会给我null
和IllegalStateException
。
我检查了传递给getResource()
方法的路径并且它是正确的 - 我必须返回一个目录,然后转到SingleIcon.fxml。无论如何,如果路径不正确,它将无法在IntelliJ中工作。
你有什么想法吗?
答案 0 :(得分:0)
您在致电getResource
时使用的是相对路径。这是返回null,导致异常。如果资源与jar一起打包,只需像这样调用它
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/resources/fxml/SingleIcon.fxml"));
注意前面的正斜杠。