JavaFX与其他JavaFX项目一起部署

时间:2014-09-26 11:51:56

标签: java netbeans deployment javafx-8

我有两个JavaFX项目。

  • 子项目:带标签的AnchorPane。 (和一个控制器连接到 它)
  • 主要项目:带按钮的AnchorPane。你点击它,它将是 在它上面打开一个带有Sub Project的新窗口。

所以Sub Project和Main Project都有自己的fxml文件和控制器。

当我使用NetBeans编译主项目时,它完全正常。 但是,一旦我将主项目部署到其他计算机,它会给我一个错误消息"系统找不到指定的文件"

我认为问题是当我弹出时,我使用子项目的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 个答案:

答案 0 :(得分:0)

我找到了问题的解决方案,因此我将其发布在此处以供将来参考。

如果您有包含SubProject的MainProject,并且您想要将SubProject的fxml加载到MainProject,则需要从SubProject的.jar文件加载SubProject的fxml。 上面的代码似乎是从你的src文件加载SubProject的fxml,而不是.jar文件,这导致了问题。

要从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"));

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