【问题标题】:JavaFX Deploying with other JavaFX projectsJavaFX 与其他 JavaFX 项目一起部署
【发布时间】:2014-09-26 11:51:56
【问题描述】:

我有两个 JavaFX 项目。

  • 子项目:带有标签的 AnchorPane。 (和一个控制器连接到 它)
  • 主要项目:带有按钮的 AnchorPane。你点击它,它会
    弹出一个带有子项目的新窗口。

所以子项目和主项目都有自己的 fxml 文件和控制器。

当我使用 NetBeans 编译主项目时,它工作得非常好。 但是,一旦我将主项目部署到其他计算机,它会给我一条错误消息“系统找不到指定的文件”

我认为问题是我在弹出 子窗口。我一直在尝试从外部库中获取 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。 提前谢谢你

【问题讨论】:

  • 我找到了一个 Oracle 网页“5.8.3 打包复杂应用程序”,上面写着“对于可双击的 JAR 文件,请考虑将所有内容重新打包成一个巨大的 JAR 文件并加载本机库和数据文件从 JAR 里面。”但是,我不知道这是什么意思..
  • new File("D:/SubProjAddress/SubProject.fxml") 是 fxml 的绝对路径。您需要使用相对路径。
  • 我试过 ("../SubProjAddress/SubProject.fxml") 但它只适用于 netbeans 编译器
  • 试试这样的(/packagename/SubProject.fxml)
  • (/packagename/SubProject.fxml) 即使使用 NetBeans 编译器也不起作用。它只是将我引导到 D:/SubPakage/SubProject.fxml

标签: java netbeans deployment javafx-8


【解决方案1】:

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

如果您的 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"));

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多