兄弟目录中的JavaFX开放资源

时间:2018-08-28 02:36:52

标签: java javafx netbeans fxml

我试图结构化项目,以便在单个文件夹中没有所有应用程序源,但是加载fxml文件时遇到问题。

我的项目结构

-Project
    -MainMenu
        -MainMenu.fxml
        -MainMenuController.java
    -ChildMenu
        -ChildMenu.fxml
        -ChildMenuController.java

我似乎无法从我的 MainMenuController.java 类加载我的 ChildMenu.fxml 文件。这就是我尝试过的

Parent root = FXMLLoader.load(getClass().getResource("../ChildMenu/ChildMenu.fxml"));

Parent root = FXMLLoader.load(getClass().getResource("./ChildMenu/ChildMenu.fxml"));

Parent root = FXMLLoader.load(getClass().getResource("/ChildMenu/ChildMenu.fxml"));

Parent root = FXMLLoader.load(getClass().getResource("/ChildMenu.fxml"));

Parent root = FXMLLoader.load(getClass().getResource("ChildMenu.fxml"));

我也试图同时搜索堆栈溢出和谷歌,但没有找到解决问题的方法。

这是我正在使用的图片,我在上面简化了我的问题,但这似乎无济于事。

enter image description here

NetBeans将项目构建到一个临时Jar中,因此使用完整路径应该可以,但是当前不行,如果您看到生成/运行系统显示我所在的完整路径的输出,则

C:\Users\Tyler\Documents\NetBeansProjects\InventoryManagementUI

但是,如果您实际查看构建日志,它会说它是在其中构建/运行jar的  C:\Users\Tyler\Documents\NetBeansProjects\InventoryManagementUI\dist\run96470141\InventoryManagementUI.jar

我肯定想念一些明显的东西。

为了完整起见,这是我的openWindow方法

   public void openWindow(String window, Stage stage) {
    try {

        Parent root = FXMLLoader.load(getClass().getResource(window));
        Scene scene = new Scene(root);

        System.out.println("Show scene");
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setScene(scene);
        stage.show();
    } catch (Exception e) {
        System.out.println("Failed to open new window: " + e.getMessage());
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

解决方法是从类路径的开头以正斜杠开头,如下所示:

 Parent root = FXMLLoader.load(getClass().getResource("/inventorymanagementui/AddPartMenu/AddPartMenu.fxml"));