Scala getClass.getResource() returning null

2019-02-07 22:42发布

问题:

I have this code:

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

and it always returns null (or Unit). I have only two files in the project:

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

and when I run the Test.scala the url value is always null.

I just tried rebuild the project, I am using IntelliJ IDEA. What am I doing wrong here?

回答1:

You have three options:

  • take advantage of relative path to your current package (where Test.class is):

    getClass.getResource("test.fxml")
    
  • you can use absolute path:

    getClass.getResource("/com/mysite/main/test.fxml")
    
  • or load through the ClassLoader (note that it always start from root):

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

In IntelliJ IDEA, make sure you have added ;?*.fxml to the:

Settings (Preferences on Mac) | Compiler | Resource Patterns.



回答2:

Possibly it's not being copied to the bin/ directory from the src/ directory? This happens on recompilation, but if you drop it into the src/ directory after the program is already compiled, the IDE won't know.



回答3:

Late answer but I just had this same problem. The root cause was an incorrect rootProject.name entry in my settings.gradle. Once I fixed that, cleaned, and rebuilt my resource were able to load using getClass().getResource(). Hopefully that helps somebody.