IllegalStateException:运行jar文件时未设置位置

时间:2016-01-03 19:12:47

标签: java fxml illegalstateexception

我编写了一个在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)会给我nullIllegalStateException

我检查了传递给getResource()方法的路径并且它是正确的 - 我必须返回一个目录,然后转到SingleIcon.fxml。无论如何,如果路径不正确,它将无法在IntelliJ中工作。

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您在致电getResource时使用的是相对路径。这是返回null,导致异常。如果资源与jar一起打包,只需像这样调用它

FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/resources/fxml/SingleIcon.fxml"));

注意前面的正斜杠。