1

也许这一定是一件非常简单的事情,但到目前为止,没有一个解决方案对我有用。所以最后的问题,也许是我没有考虑到的问题。

我想从 Netbeans 项目的 start 类的子包中加载 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();
    }
}

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

4

2 回答 2

1

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

Parent root = (Parent) loader.load(getClass().getResourceAsStream("ui/FXMLDocument.fxml"));
于 2014-09-14T11:44:38.337 回答
1

除了上面 ifLoop 的正确答案之外,如果有人可能再次遇到同样的问题,这只是一个额外的提示。

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

就我而言,重构包后:

是这样的:

fx:controller="OldPacakgeDefault.FXMLDocumentController"

应该是这样的:

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

于 2014-09-14T12:40:08.360 回答