我有两个JavaFX项目。
因此,子项目和主项目都有自己的 fxml 文件和控制器。
当我使用NetBeans编译Main Project时,它运行良好。但是,一旦我将Main Project部署到其他计算机,它就会给我一条错误消息“系统找不到指定的文件”
我认为问题是当我弹出子窗口时,我使用了子项目的fxml位置的绝对路径。我一直试图从外部库获取Jar文件中fxml的路径,但我找不到任何解决方案。有人能帮助我吗?
这是我在主项目的控制器中打开新子项目窗口的代码
@FXML
private void handleButtonAction() throws IOException() {
FXMLLoader loader = new FXMLLoader(new File("D:/SubProjAddress/SubProject.fxml").toURI().toURL());
Parent root = (Parent)loader.load();
Scene scene = new Scene(root);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
}
我正在使用Java 8,netbeans。提前谢谢你
我找到了解决这个问题的方法,所以我把它贴在这里以备将来参考。
如果你有包含子项目的主项目,并且你想要将子项目的 fxml 加载到你的主项目中,你需要从子项目的.jar文件中加载子项目的 fxml。上面的代码似乎是从 src 文件而不是.jar文件加载子项目的 fxml,这导致了问题。
要从jar文件加载fxml文件,只需使用Class.getResource()而不是上面的代码。
举个例子,
FXMLLoader loader = new FXMLLoader(new File("D:/SubProjAddress/SubProject.fxml").toURI().toURL());
Parent root = (Parent)loader.load();
成为
Parent root = FXMLLoader.load(getClass().getResource("/subpackage/SubProject.fxml"));
使用它,我可以毫无问题地部署包含多个项目的应用程序。