FXML资源未加载

时间:2015-11-22 23:01:46

标签: java javafx javafx-8

我正在开发一个简单的JavaFX应用程序,我无法加载其中一个资源(login.fxml),即使我可以加载另一个位于同一文件夹(main.fxml)中。

我的文件夹组织位于下面的屏幕截图中。错误位于第50行(突出显示)

enter image description here

loadVista方法源代码:

public static void loadVista(String fxml) {
    try {
        mainController.setVista(
            FXMLLoader.load(
                Navigator.class.getResource(
                    fxml
                )
            )
        );
    } catch (IOException e) {
        e.printStackTrace();
    }
}

有人能帮助我吗?

提前致谢, 加布里埃尔

编辑:stacktrace的一部分:

Caused by: java.lang.NullPointerException
at sisgem.view.Navigator.loadVista(Navigator.java:45)
at sisgem.SisGEMApplication.loadMainPane(SisGEMApplication.java:50)
at sisgem.SisGEMApplication.start(SisGEMApplication.java:25)

1 个答案:

答案 0 :(得分:2)

mainController为空,因此当您致电NullPointerException时,您会收到mainController.setVista(...)。这是因为您使用static方法FXMLLoader.load(URL)加载FXML,并且永远不会在load实例FXMLLoader上调用loader。由于该实例从不执行其load()方法,因此其控制器永远不会被初始化,loader.getController()将返回null

因此,您的loadMainPane()方法应该是

private Pane loadMainPane() throws IOException {

    FXMLLoader loader = new FXMLLoader(Navigator.class.getResource(Navigator.PANE));

    Pane mainPane = loader.load();

    MainController mainController = loader.getController();

    Navigator.setMainController(mainController);

    Navigator.loadVista("login.fxml");

    return mainPane ;
}