2014-10-12 14 views
11

Używam IntelliJ IDEA 13.1.5, kiedyś współpracowałem z Eclipse. Pracuję nad aplikacją JavaFX, staram się załadować plik FXML w mojej klasie MainApp za pomocą metody getClass(). GetResource(). Czytam dokumentację i próbuję kilku pomysłów, na końcu mam null.IntelliJ IDEA - getClass(). GetResource ("...") return null

Jest hierarchia:

dz.bilaldjago.homekode.MainApp.java

dz.bilaldjago.homekode.view.RootLayout.FXML

Jest to fragment kodu użyłem:

FXMLLoader loader = new FXMLLoader(); 
loader.setLocation(getClass().getResource("view/RootLayout.fxml")); 

próbowałem inne rozwiązanie takie daje URL z korzenia i przy użyciu classLoader

Wynik jest taki sam. Każdy pomysł proszę

+1

możliwe duplikat [Java - class.getResource zwraca null] (http://stackoverflow.com/questions/4301329/java-class -getresource-zwraca-null) – maja

Odpowiedz

15

Dla tych, którzy używają Intellij Idea: sprawdź dla Settings -> Compiler -> Resource patterns.

Ustawienie zawiera wszystkie rozszerzenia, które należy interpretować jako zasoby. Jeśli rozszerzenie nie jest zgodne z żadnym wzorem, klasa.getResource zwróci wartość null dla zasobów używających tego rozszerzenia.

+2

Dodaję pliki fxml używając tego wzorca? *. fxml, ale wynik jest taki sam! – BilalDja

+0

Dlaczego "? *. Fxml", a nie "\ *. Fxml" lub "view: *" - wszystkie pliki i foldery w widoku katalogu. zobacz: https://www.jetbrains.com/idea/webhelp/compiler.html#pattern – stacky

+0

Podążam tym samym schematem w polu Zasoby – BilalDja

12

Rozwiązałem ten problem, wskazując na IDEA na resource root.

Right click na katalogu (lub po prostu nazwa projektu) ->Mark directory As ->Resource Root.

Przekompiluj & Radujcie: P Nadzieję, że to działa dla Ciebie ~

+0

proste, ale pracował dla miiii: D – truongnm

+0

nie działa dla mnie, zmieniłem wzory zasobów Compiler. Utworzono folder zasobów zarówno jako folder główny mojego projektu, a następnie folder roboczy, w którym znajduje się moja klasa i nadal nie działa! proszę pomóż. Używam intellij –

+0

@AVERAGE Witam, nie sądzę, że byłby to problem. Czy próbowałeś ponownie utworzyć projekt i ponowić operację? Jeśli nadal nie działa, opublikuj szczegółowe kroki operacji. Byłoby to pomocne w rozwiązaniu Twojego problemu. – MewX

0

dałem się próbuje użyć getClass().getResource("BookingForm.css"));

Zamiast utworzyć obiekt pliku, utwórz URL z tego obiektu, a następnie przekazać go do getStyleSheets() lub setLocation() File file = new File(System.getProperty("user.dir").toString() + "/src/main/resources/BookingForm.css");

scene.getStylesheets().add(folder.toURI().toURL().toExternalForm());

-1

Windows jest wielkość liter, reszta świata nie. Również plik wykonywalny java jar (format zip), w nazwach zasobów rozróżniana jest wielkość liter.

Najlepszy zmienić nazwę pliku

view/RootLayout.FXML 

do

view/RootLayout.fxml 

Należy to zrobić poprzez przeniesienie oryginalnego pliku z dala, i utworzenie nowego.

Skompiluj także do słoika i sprawdź, czy plik fxml został dodany do słoika (plik zip). Gdy ścieżki zasobów IntelliJ są traktowane przez inną odpowiedź.

Nawiasem mówiąc, jest to ścieżka w stosunku do ścieżki pakietu getClass().Bądź świadomy, jeśli przedłużony do tej klasy zmienia pełną ścieżką, lepiej użyć:

MainApp.class.getResource("view/RootLayout.fxml") 
0

jeśli projekt jest projektem Maven, sprawdź kod docelowej, aby zobaczyć, czy istnieje plik .fxml tam. jeśli go tam nie ma, po prostu dodaj

<resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <includes> 
       <include>**/*.xml</include> 
      </includes> 
      <filtering>true</filtering> 
     </resource> 
    </resources> 

w pom.xml