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")