2013-07-04 17 views
6

Jestem nowym użytkownikiem javaFX i próbuję uruchomić prostą aplikację. to interfejs użytkownika jest tworzony za pomocą programu javaFX scenebuilder, a klasa główna ma wyświetlać interfejs użytkownika, a nie inne.Błąd aplikacji javaFX: Nie określono zasobów

public class Main extends Application { 

    public static void main(String[] args) { 
     launch(Main.class, (String[])null); 
    } 

@Override 
public void start(Stage primaryStage) {; 
    try { 
     AnchorPane root=(AnchorPane)FXMLLoader.load(Main.class.getResource("Main.fxml")); 
     Scene scene = new Scene(root); 
     primaryStage.setScene(scene); 
     primaryStage.setTitle("Issue Tracking Lite Sample"); 
     primaryStage.show(); 
    } catch (IOException e) {System.err.println(e);} 

    } 


} 

Mam ten błąd podczas uruchamiania aplikacji:

No resources specified. 

/D:/workspace/FileSharing_ServerSide/bin/com/Shayan/FileSharing/Server/Main.fxml:16 
    at javafx.fxml.FXMLLoader$Element.processPropertyAttribute(FXMLLoader.java:305) 
at javafx.fxml.FXMLLoader$Element.processInstancePropertyAttributes(FXMLLoader.java:197) 
at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:588) 
at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2430) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2136) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2028) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2742) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2721) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2707) 
javafx.fxml.LoadException: No resources specified. 

mówi, że plik nie istnieje, ale istnieje w tym folderze z dokładnie tej samej nazwie! jest w tym samym pakiecie co kod. Ktoś wie, co się dzieje ?! Z góry dzięki

+2

wha t jest zawartość Main.fxml? Wygląda na to, że tam jest błąd. – Dahaka

+0

Main.fxml są w tym samym pakiecie co twoja główna klasa? –

+0

Tak, błąd pochodzi z pliku fxml !! nazwa kontrolera nie została poprawnie określona w kodzie fxml. dzięki Dahaka;) –

Odpowiedz

11

JavaFX zgłasza wyjątek javafx.fxml.LoadException: No resources specified., gdy FXMLLoader nie mógł w pełni zbudować wykresu sceny z powodu braku zasobu.

Może się to zdarzyć z różnych powodów. Napotkałem to z powodu następujących czynników:

  1. Wystąpił błąd podczas ładowania kontrolera określonego w pliku fxml.
  2. Plik fxml próbuje odwoływać się do zasobu w ResourceBundle, ale FXMLLoader nie skonfigurował prawidłowo ResourceBundle.

Może być jeszcze jeden powód, dla którego ten wyjątek jest generowany z poziomu JavaFX, ale główną przyczyną jest to, że z jakiegoś powodu FXMLLoader napotkał wyjątek podczas próby utworzenia wykresu sceny z pliku fxml.

+0

Podkreśl swój 2. powód. Zajęło mi to na zawsze zrozumienie. Dzięki! – oskopek

1

Aby uzyskać zasób, musisz podać pełną (!) Nazwę podstawową. To znaczy, ze wszystkimi pakietami wcześniej.

Jeśli plik zasób ma ten sam bas nazwę jak klasa kontrolera (co jest dość rozsądne, ponieważ pomaga utrzymanie rzeczy razem), można to zrobić w następujący sposób:

String className = this.getClass().getCanonicalName(); 
// @formatter:off 
    ResourceBundle languageResource = 
      ResourceBundle.getBundle(className, Locale.GERMAN); 
    // formatter:on 

    Object objPane = FXMLLoader.load(fxmlUrl, languageResource); 

I napisałem pomocnika programu ładującego zasoby prywatne, który wykona zadanie, pobierając obiekt i lokalizację. Oczywiście używam ustawień regionalnych zbudowanych z moich ustawień, a nie stałych, ale chciałem zachować prostotę.

Dla nazwy pliku zasobów: Jak moja klasa jest nazwany MainWindow, plik zasobów (w tym samym opakowaniu) jest MainWindow_de.properties (gdzie „de” jest częścią języka, więc ja też mam a MainWndow_en.properties w opakowaniu.

rozszerzenie jest wymagane, ponieważ jest to sposób, nazwa pliku jest budowany. Bez rozszerzenia, plik nie zostanie rozpoznany, co prowadzi do znanego wyjątku.

Nadzieja, która uniemożliwia innym spędzanie wielu godzin na robieniu badań ...

Powiązane problemy