IntelliJ IDEA - getClass().getResource("...")返回null

Bil*_*Dja 22 java javafx intellij-idea fxml

我正在使用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"));
Run Code Online (Sandbox Code Playgroud)

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

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

Mew*_*ewX 19

我通过指出resource rootIDEA 解决了这个问题.

Right click在目录(或只是项目名称) - > Mark directory As- > Resource Root.

重新编译和欢欣:P希望这对你有用〜


sta*_*cky 16

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

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

  • 它没有任何改变! (4认同)
  • 我使用这种模式添加fxml文件?*.fxml但结果是一样的! (2认同)
  • @BilalDja你设法解决了这个问题吗?因为我现在遇到同样的问题 (2认同)

小智 14

TL; 博士;

  1. 将您的资源放在resources文件夹中。

  2. 在它们的名字前加上一个斜线使用它们: getClass().getResource("/myfont.ttf");

很长的故事;

如果您正在使用Intellij IDEA并创建了一个Maven项目,您应该将您的资源放在resources文件夹中(由 intellij 本身标记为资源根目录),这些资源转到您编译的应用程序的根目录。

我的意思是,/resources/myfont.ttf将转到/myfont.ttf生成的构建中。

所以你应该通过/myfont.ttf而不是myfont.ttf. 像这样使用它:

getClass().getResource("/myfont.ttf");
Run Code Online (Sandbox Code Playgroud)

无需更改任何其他内容。只是这个帮助了我。

  • “他们的名字前有一个斜杠”谢谢,我错过了前导斜杠...... (2认同)