Scala getClass.getResource() returning null

23,625

Solution 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.

Solution 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.

Solution 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.

Share:
23,625

Related videos on Youtube

Tower
Author by

Tower

Updated on November 21, 2020

Comments

  • Tower
    Tower over 3 years

    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?

  • Tower
    Tower over 11 years
    Nope, the same thing, it returns null. I've googled and tried those, but none of them work either.
  • FThompson
    FThompson over 11 years
    @rFactor Try refreshing the project.
  • Tomasz Nurkiewicz
    Tomasz Nurkiewicz over 11 years
    @rFactor: so it must be something with your IDE. All of the above work, at least when I am using IntelliJ and maven project structure. Also are you sure Test.scala has correct package declaration? The directory is not enough.
  • Tower
    Tower over 11 years
    @TomaszNurkiewicz yes the file begins with package com.mysite.main and everything runs fine, except that it doesn't find the file and yes the file does exist. What is "refresh"? I pressed "Synchronize" and also "Rebuild project".
  • Tower
    Tower over 11 years
    The file is not copied to the "out" folder structure, although the files "Test$.class" and "Test.class" are. Is that a problem?
  • CrazyCoder
    CrazyCoder over 11 years
  • grasshopper
    grasshopper about 9 years
    this solved my problem. I just had to to sbt clean compile and then it could see the resources. Thanks for preventing me from wasting any more time on this!