我试图结构化项目,以便在单个文件夹中没有所有应用程序源,但是加载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"));
我也试图同时搜索堆栈溢出和谷歌,但没有找到解决问题的方法。
这是我正在使用的图片,我在上面简化了我的问题,但这似乎无济于事。
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();
}
}
答案 0 :(得分:0)
解决方法是从类路径的开头以正斜杠开头,如下所示:
Parent root = FXMLLoader.load(getClass().getResource("/inventorymanagementui/AddPartMenu/AddPartMenu.fxml"));