IntelliJ IDEA – getClass()。getResource(“…”)返回null

我正在使用IntelliJ IDEA 13.1.5,我曾经使用Eclipse。 我正在研究JavaFX应用程序,我尝试使用getClass()。getResource()在我的MainApp类中加载FXML文件。 我阅读了文档并尝试了几个想法,最后我得到了null

这是层次结构:

dz.bilaldjago.homekode.MainApp.java

dz.bilaldjago.homekode.view.RootLayout.FXML

这是我使用的代码片段:

FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("view/RootLayout.fxml")); 

我尝试了其他解决方案,例如从root用户提供url并使用classLoader

结果是一样的。 请问任何想法

对于那些使用Intellij Idea的人:检查Settings -> Compiler -> Resource patterns

该设置包含应解释为资源的所有扩展。 如果扩展不符合此处的任何模式,则class.getResource将使用此扩展为资源返回null。

我通过指出IDEA上的resource root解决了这个问题。

Right click目录(或只是项目名称) – >将Mark directory As – > Resource Root Mark directory As

重新编译并高兴:P希望这对你有用〜

如果您的项目是maven项目,请检查目标代码以查看您的.fxml文件是否存在。 如果它不在那里,只需添加

   src/main/java  **/*.xml  true   

在你的pom.xml中

我放弃了尝试使用getClass().getResource("BookingForm.css"));

相反,我创建一个File对象,从该对象创建一个URL,然后将其传递给getStyleSheets()或setLocation() File file = new File(System.getProperty("user.dir").toString() + "/src/main/resources/BookingForm.css");

scene.getStylesheets().add(folder.toURI().toURL().toExternalForm());

Windows区分大小写,世界其他地方没有。 另外一个可执行的Java jar(zip格式)资源名称区分大小写。

最好重命名该文件

 view/RootLayout.FXML 

 view/RootLayout.fxml 

这必须通过移动原始文件并创建一个新文件来完成。

还要编译到jar,并检查fxml文件是否已添加到jar(zip文件)中。 当没有IntelliJ资源路径被其他答案处理时。

顺便说一下,这是相对于getClass()的包路径的路径。 请注意,如果您将此类扩展为完整路径更改,请更好地使用:

 MainApp.class.getResource("view/RootLayout.fxml")