如何引用资源文件夹中的JavaFXML文件?
我正在创建一个JavaFXGUI应用程序,我的项目是一个maven配置的项目。我希望能够在控制器中引用我的fxml文件,如下所示:如何引用资源文件夹中的JavaFXML文件?,java,resources,javafx,fxml,buildpath,Java,Resources,Javafx,Fxml,Buildpath,我正在创建一个JavaFXGUI应用程序,我的项目是一个maven配置的项目。我希望能够在控制器中引用我的fxml文件,如下所示: FXMLLoader.load(getClass().getResource("main.fxml"); 其中,my main.fxml文件位于src/main/resources文件夹中,而我的控制器位于src/main/java文件夹中。我该怎么做呢?我的src/main/resources文件夹位于构建路径中,我可以从src/main/java文件夹中的类
FXMLLoader.load(getClass().getResource("main.fxml");
其中,my main.fxml文件位于src/main/resources文件夹中,而我的控制器位于src/main/java文件夹中。我该怎么做呢?我的src/main/resources文件夹位于构建路径中,我可以从src/main/java文件夹中的类调用src/main/resources文件夹中的.properties文件
编辑
我试图将fxml文件放在主资源文件夹的相应目录中:
但是我仍然有一个错误。示例用法
位置分辨率选项
loader.setLocation(getClass().getResource("/main.fxml"));
loader.setLocation(getClass().getResource("/fxml/main.fxml"));
loader.setLocation(getClass().getResource("/main.fxml"));
loader.setLocation(getClass().getResource("/fxml/main.fxml"));
loader.setLocation(getClass().getResource("main.fxml"));
com/mycompany/myapp/Main.java
调用最后一个load命令
FXMLLoader使用建议
新建FXMLLoader()
而不是使用
这个
- 静态方法 当你想(比如实例化)时会变得混乱 控制器)从装入器中取出
- 在加载程序上设置基于URL的位置可以解析 fxml和css文件中加载的相对资源。相对的 资源不解析为基于流的构造函数
确保IDE或生成工具正在将fxml文件从资源目录复制到生成输出目录。要了解此设置的Intellij,请参阅:。您正在使用的
FXMLLoader FXMLLoader=new FXMLLoader(getClass().getResource(“main.fxml”)
加载main.fxml。这需要main.fxml和java类将其加载到相同的目录/路径中。
如果要从与加载fxml文件的java类不同的路径/位置加载fxml文件,则需要使用相对路径。
正如上面提到的@jewelsea,您可以在main.fxml之前使用/character来使用相对路径。
因此,在您的案例中,使其适用于您的代码是
FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource("/main.fxml") );
在操作系统的文件资源管理器中打开资源文件夹。在这里,您将看到您创建了一个“dominion.application”文件夹,而不是“dominion”文件夹中的“application”文件夹。因此,“MainController”类与fxml文件放在不同的包中。在示例中,您仍然使用静态方法。您需要调用getResourceAsStream而不是GetResource感谢Felix,修复并澄清了答案。3年28票,之前没有人在原始答案中指出这种反常现象;-)一直以来,它都失败了,因为我没有将
/
放在开始文件夹之前。例如,getClass().getResource(“fxml/main.fxml”)
。对于NetBeans用户,您可以通过右键单击项目目录>属性>选择“源”>选择要添加到源>添加文件夹的文件夹,将现有文件夹添加到src。因此,如果您的fxml中已经有一个文件夹要引用,您可以添加该文件夹并调用带有其相对路径的fxml文件。实际上,这是问题的简单答案,只要您仔细考虑一下,也是有意义的。该路径相对于调用FXMLLoader()的源文件。