2012-08-26 11 views
19

mam ten kod:Scala getClass.getResource() powrocie zerowy

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

i zawsze zwraca null (lub Unit). Mam tylko dwa pliki w projekcie:

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

i kiedy uruchomić Test.scala wartość url zawsze ma wartość null.

Po prostu próbowałem odbudować projekt, używam IntelliJ IDEA. Co ja tu robię źle?

+1

możliwy duplikat [IntelliJ: w jaki sposób można również kopiować pliki inne niż java do katalogu bin?] (Http://stackoverflow.com/questions/11176969/intellij-how-to-make-non-java-files -copied-to-the-bin-directory-as-well) – CrazyCoder

Odpowiedz

26

Masz trzy opcje:

  • skorzystać z względną ścieżkę do bieżącego pakietu (gdzie Test.class IS):

    getClass.getResource("test.fxml") 
    
  • można użyć ścieżki bezwzględnej:

    getClass.getResource("/com/mysite/main/test.fxml") 
    
  • lub załaduj przez ClassLoader (Należy pamiętać, że zawsze zaczynają się od korzenia):

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

W IntelliJ IDEA, upewnij się, że zostały dodane ;?*.fxml do:

Settings (Preferences na Macu) | Compiler | Wzory zasobów.

+3

Nie, to samo, zwraca zero. Szukałem go i próbowałem, ale żaden z nich też nie działa. – Tower

+1

@rFactor Spróbuj odświeżyć projekt. – Vulcan

+0

@rFactor: więc to musi być coś z twoim IDE. Wszystkie powyższe prace, przynajmniej gdy używam struktury projektu IntelliJ i maven. Jesteś także pewien, że 'Test.scala' ma poprawną deklarację pakietu? Katalog nie wystarczy. –

3

Prawdopodobnie nie jest on kopiowany do katalogu bin/z katalogu src /? To się dzieje podczas ponownej kompilacji, ale jeśli upuścisz go do katalogu src/po kompilacji programu, IDE nie będzie wiedział.

+0

to rozwiązało mój problem. Musiałem po prostu sbtować czystą kompilację, a potem mógł zobaczyć zasoby.Dziękuję, że nie pozwoliłeś mi marnować więcej czasu! – grasshopper

1

Późna odpowiedź, ale miałem ten sam problem. Główną przyczyną był niepoprawny wpis rootProject.name w moim settings.gradle. Po naprawieniu tego, wyczyszczeniu i przebudowaniu mój zasób mógł zostać załadowany za pomocą metody getClass(). GetResource(). Mam nadzieję, że to pomaga komuś.