从start类的子包加载Java FXML

时间:2014-09-14 11:28:17

标签: java fxml fxmlloader

这可能是一件非常简单的事情,但是到目前为止,有些解决方案对我来说无效。最后这个问题,也许是我没有考虑的事情。

我想从Netbeans项目的启动类的子包中加载FXML及其控制器。在这里尝试了所有解决方案已经提到许多不同的问题,但仍然没有用。

包结构:

Source Pacakge
    -a
        -b
            -c
                -d
                    StartUp_Classs.java
                    -ui
                        FXMLDocument.fxml
                        FXMLDocumentController.java

以下是启动方法:

@Override
public void start(Stage stage) throws Exception {

    try {
        setUserAgentStylesheet(STYLESHEET_MODENA);
        FXMLLoader loader = new FXMLLoader();
        Parent root = (Parent) loader.load(getClass().getResourceAsStream("/ui/FXMLDocument.fxml"));
        final FXMLDocumentController controller = (FXMLDocumentController) loader.getController();

        stage.addEventHandler(WindowEvent.WINDOW_SHOWN, controller::handleWindowShownEvent);
        stage.addEventHandler(WindowEvent.WINDOW_SHOWING, controller::handleWindowShowingEvent);

        Scene scene = new Scene(root);

        stage.setScene(scene);

        stage.setResizable(false);
        stage.toFront();
        stage.setTitle("Simple FXML");
        stage.getIcons().add(new Image(getClass().getResourceAsStream("/resources/images/Orange.jpg")));
        stage.show();
    } catch (IOException iOException) {
        iOException.printStackTrace();
    }
}

任何建议都会有很大的帮助。

2 个答案:

答案 0 :(得分:1)

您可以删除.fxml文件的路径字符串中的前导/

Parent root = (Parent) loader.load(getClass().getResourceAsStream("ui/FXMLDocument.fxml"));

答案 1 :(得分:1)

除了ifLoop's correct answer above之外,如果有人可能再遇到同样的问题,还需要额外提示。

如果您在Netbeans中重构包,Netbeans不太可能更新FXML中的Controller类路径。因此,最好在FXML文件开头的fx:controller=属性中检查正确的类路径并手动更正。

在重构包之后的情况:

就像这样:

fx:controller="OldPacakgeDefault.FXMLDocumentController"

一定是这样:

fx:controller="a.b.c.d.ui.FXMLDocumentController"

相关问题