java - JavaFX 在同级目录中打开资源
问题描述
我正在尝试构建我的项目,以便在单个文件夹中没有我的应用程序的所有源,但我在加载 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();
}
}
解决方案
修复方法是从类路径的开头开始,使用前导正斜杠,如下所示:
Parent root = FXMLLoader.load(getClass().getResource("/inventorymanagementui/AddPartMenu/AddPartMenu.fxml"));
推荐阅读
- javascript - Vue J. 路由器/Index.js
- python - 在 Python 返回分数时遇到石头剪刀布代码问题
- python - 在 TDA-API python 脚本中为多个代码添加循环
- date - 当我的日期切片器按一周过滤时,SAMEPERIODLASTYEAR 给我整个月的销售数据?
- visual-studio - Visual Studio - .Net 5.0 项目中的外部程序集未更新
- java - 是否有更快(更简洁)的方法来为 JDBC 中的 PreparedStatements 设置许多参数?
- python - 与所有文档作为本地 RAM 中的局部变量相比,带有 MongoDB 文档的 Python 迭代非常慢
- kotlin - kotlin 中是否有类似 joinToString for Int 的方法?
- getstream-io - 条件渲染和流的困难——使用自定义 MessageContent 或基于 message.customField 值的默认 MessageContent
- python - 将 Python 的 deepcopy 用于不同的 django 模型