2012-08-26 121 views
19

我有这样的代码:斯卡拉getClass.getResource()返回null

val url: URL = getClass.getResource("com/mysite/main/test.fxml") 

,它总是返回null(或Unit)。我只有两个项目中的文件:

MyProj/src/com/mysite/main/Test.scala 
MyProj/src/com/mysite/main/test.fxml 

,当我运行Test.scalaurl值总是空。

我刚刚尝试重建项目,我正在使用IntelliJ IDEA。我在这里做错了什么?

+1

[IntelliJ:如何将非java文件复制到bin目录中?]的可能的重复项(http://stackoverflow.com/questions/11176969/intellij-how-to-make-non-java-files -bin-directory-as-well) – CrazyCoder

回答

26

你有三个选择:

  • 相对路径趁到当前的包(其中Test.class是):

    getClass.getResource("test.fxml") 
    
  • 您可以使用绝对路径:

    getClass.getResource("/com/mysite/main/test.fxml") 
    
  • 或通过ClassLoader加载(请注意,它总是从根开始):

    getClass.getClassLoader.getResource("com/mysite/main/test.fxml") 
    

在IntelliJ IDEA的,请确保您已经添加;?*.fxml到:

SettingsPreferences在Mac)| Compiler | 资源模式

+3

不,同样的事情,它返回null。我已经搜索并尝试了这些,但他们都没有工作。 – Tower

+1

@rFactor尝试刷新项目。 – Vulcan

+0

@rFactor:所以它必须是你的IDE的东西。以上所有工作,至少在我使用IntelliJ和Maven项目结构时都是如此。你也确定'Test.scala'有正确的包声明吗?目录是不够的。 –

3

可能不是从src /目录复制到bin /目录? 这是在重新编译时发生的,但是如果在程序编译完成后将其放到src /目录下,IDE将不知道。

+0

这解决了我的问题。我只需要干净的编译,然后可以看到资源。感谢您阻止我浪费更多时间在此! – grasshopper

1

迟到的答案,但我只是有这个相同的问题。根本原因是我的settings.gradle中的一个不正确的rootProject.name条目。一旦我解决了这个问题,清理并重建我的资源可以使用getClass()。getResource()加载。希望这有助于某人。