提问者:小点点

JavaFX与其他JavaFX项目一起部署


我有两个JavaFX项目。

    < li >子项目:带有标签的锚定窗格。(以及与之相连的控制器) < li >主项目:带按钮的锚定窗格。你点击它,它将< br >弹出一个新窗口,上面有子项目。

因此,子项目和主项目都有自己的 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。提前谢谢你


共1个答案

匿名用户

我找到了解决这个问题的方法,所以我把它贴在这里以备将来参考。

如果你有包含子项目的主项目,并且你想要将子项目的 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"));

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