这可能是一件非常简单的事情,但是到目前为止,有些解决方案对我来说无效。最后这个问题,也许是我没有考虑的事情。
我想从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();
}
}
任何建议都会有很大的帮助。
答案 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"