我有两个JavaFX项目。
子项目:带有标签的AnchorPane。 (以及连接到的控制器
它)
主要项目:带按钮的AnchorPane。您单击它,它将
调出一个带有子项目的新窗口。
因此,子项目和主项目都有自己的fxml文件和控制器。
当我使用NetBeans编译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。
先感谢您
最佳答案
我找到了解决该问题的方法,因此将其发布在此处以供将来参考。
如果您的MainProject包含SubProject,并且要将SubProject的fxml加载到MainProject,则需要从SubProject的.jar文件中加载SubProject的fxml。
上面的代码似乎从您的src文件而不是.jar文件加载SubProject的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"));
使用此方法,我可以毫无问题地部署包含多个项目的应用程序。