我有两个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"));


使用此方法,我可以毫无问题地部署包含多个项目的应用程序。

10-02 05:43
查看更多