Jak odwołać się do plików javafx fxml w folderze zasobów?

Tworzę aplikację javafx GUI i mój projekt jest projektem skonfigurowanym przez Mavena. Chcę móc odwoływać się do moich plików fxml w ten sposób w moich kontrolerach:

FXMLLoader.load(getClass().getResource("main.fxml"); 

Gdzie moja główna.plik fxml znajduje się w folderze src/main/resources, a mój kontroler znajduje się w folderze src/main/java. Jak mam to zrobić? Mój folder src / main / resources znajduje się w ścieżce budowania i jestem w stanie wywołać .Plik Właściwości, który znajduje się w folderze src/main/resources z klasy w katalog src / main / java.

Edit

Próbowałem umieścić plik fxml w odpowiednim katalogu głównego katalogu zasobów:

Tutaj wpisz opis obrazka

Ale nadal mam błąd.
Author: j will, 2013-10-26

3 answers

przykład użycia

FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/main.fxml"));
Parent content = loader.load(); 

Opcje rozdzielczości lokalizacji

  1. Umieść cały swój fxml w katalogu src/main / resources.

    loader.setLocation(getClass().getResource("/main.fxml"));
    
  2. Umieść cały swój fxml w katalogu src/main/resources / fxml.

    loader.setLocation(getClass().getResource("/fxml/main.fxml"));
    
  3. Umieść fxml w odpowiednim katalogu zasobów; np. src/main/resources/com/mycompany / myapp.

    loader.setLocation(getClass().getResource("main.fxml")); 
    

Ostatnia opcja zakłada, że klasa, z której jesteś Ładowanie fxml znajduje się w tej samej względnej lokalizacji w odpowiedniej hierarchii źródeł Javy. Na przykład, możesz wywołać ostatnią komendę load ze źródła com.mycompany.myapp.Main.java.

fxmlloader usage recommendations

  1. Tworzy instancję FXMLLoader przez new FXMLLoader() zamiast używać metody statyczne na FXMLLoader .

    • metody statyczne staje się mylące, gdy chcesz uzyskać wartości (jak instantiated Kontrolery) z ładowacz.
  2. Ustaw lokalizację na uruchomionym Fxmlloaderze i wywołaj load() zamiast ładowania ze strumienia za pomocą load(stream).

    • ustawienie adresu URL w loaderze pozwala na rozdzielczość względne zasoby ładowane w plikach fxml i css. Względny zasoby nie są rozwiązywane dla konstruktora opartego na strumieniu.
  3. Aby uzyskać lokalizację opartą na klasie, użyj getClass().getResource(), Jak to jest Oparte na URL, a nie getClass().getResourceAsStream() który jest oparty na strumieniu.

IDE I Build Settings

Upewnij się, że Twoje narzędzie IDE lub build kopiuje pliki fxml z katalogu zasobów do katalogu wyjściowego build. Aby zrozumieć ustawienia Intellij, zobacz: jak przekonwertować normalny projekt java w intellij do projektu JavaFx.

 72
Author: jewelsea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:43

Używasz FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource("main.fxml") );, aby załadować swój główny.fxml. To wymaga głównego.fxml i klasa java ładują go w tym samym katalogu/ścieżce. Jeśli chcesz załadować plik fxml ze ścieżki / lokalizacji innej niż ładująca go Klasa java, musisz użyć ścieżki względnej. Jak @jewelsea wspomniano powyżej, możesz użyć ścieżki względnej używając / character przed głównym.fxml. Więc kod, który sprawi, że będzie działać dla Ciebie w Twoim przypadku to

FXMLLoader fxmlLoader = new FXMLLoader( getClass().getResource("/main.fxml") );
 4
Author: Dil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-27 05:37:47

Otwórz folder zasobów w Eksploratorze plików systemu operacyjnego. Tutaj zobaczysz, że stworzyłeś " Dominium.folder aplikacji zamiast folderu aplikacji wewnątrz folderu dominion. Z tego powodu Klasa "MainController" jest umieszczana w innym pakiecie jako plik fxml.

 0
Author: Hendrik Ebbers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-19 09:59:11