我正在创建一个Javafx GUI应用程序,而我的项目是一个经过Maven配置的项目。我希望能够在控制器中像这样引用我的fxml文件:
FXMLLoader.load(getClass().getResource("main.fxml");
我的main.fxml文件位于src / main / resources文件夹中,而我的控制器位于src / main / java文件夹中。我该怎么做?我的src / main / resources文件夹位于构建路径中,我能够从src / main / java文件夹中的类调用src / main / resources文件夹中的.properties文件。
编辑
我试图将fxml文件放在主资源文件夹的相应目录中:
但我仍然有一个错误。
用法示例
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/main.fxml"));
Parent content = loader.load();
位置解析度选项
将所有fxml放在src / main / resources目录中。
loader.setLocation(getClass().getResource("/main.fxml"));
将所有fxml放在src / main / resources / fxml目录中。
loader.setLocation(getClass().getResource("/fxml/main.fxml"));
将fxml放在相应的资源目录中;例如src / main / resources / com / mycompany / myapp。
loader.setLocation(getClass().getResource("main.fxml"));
最后一个选项假定要从中加载fxml的类在相应的Java源层次结构中位于相同的相对位置。例如,您可以从source调用最后一个load命令com/mycompany/myapp/Main.java
。
FXMLLoader使用建议
通过new FXMLLoader()
而不是在FXMLLoader上使用静态方法来实例化FXMLLoader。
在实例化的FXMLLoader上设置位置,然后调用,load()
而不是使用从流中加载load(stream)
。
要基于类派生位置,请使用getClass().getResource()
,因为它是基于URL的,而不是getClass().getResourceAsStream()
基于流的。
IDE和构建设置
确保您的IDE或构建工具将fxml文件从资源目录复制到构建输出目录。要了解有关Intellij的设置,请参阅:如何将intellij中的普通Java项目转换为JavaFx项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句