我正在创建一个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文件放在主资源文件夹的相应目录中:
但我仍然有错误。
答案 0 :(得分:83)
示例用法
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 /主/资源/ COM / myCompany中/ MYAPP。
loader.setLocation(getClass().getResource("main.fxml"));
最后一个选项假定您从中加载fxml的类位于相应Java源层次结构中的相同相对位置。例如,您可以从源com.mycompany.myapp.Main.java
调用最后一个加载命令。
FXMLLoader使用建议
通过new FXMLLoader()
实例化FXMLLoader而不是使用
static methods on the FXMLLoader。
Set the location在实例化的FXMLLoader和调用上
load()
而不是使用
load(stream)
要根据类派生位置,请使用
getClass().getResource()
,因为它是基于URL的,而不是
getClass().getResourceAsStream()
是基于流的。
IDE和构建设置
确保您的IDE或构建工具正在将fxml文件从资源目录复制到构建输出目录。要了解Intellij设置,请参阅:How to convert a normal java project in intellij into a JavaFx project。
答案 1 :(得分:4)
您正在使用FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource("main.fxml") );
加载main.fxml。这需要main.fxml和java类将它加载到同一目录/路径中。
如果要从不同于加载它的java类的路径/位置加载fxml文件,则需要使用相对路径。
正如上面提到的@jewelsea,您可以在main.fxml之前使用/ bytes的相对路径。
所以在你的情况下使它适合你的代码是
FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource("/main.fxml") );
答案 2 :(得分:0)
在操作系统的文件资源管理器中打开资源文件夹。在这里你会看到你已经创建了一个" dominion.application"文件夹而不是"应用程序"文件夹里面有一个" dominion"夹。因为这个" MainController" class作为fxml文件放在不同的包中。