2016-03-29 16 views
1

Ich habe ein Haupt-FXML-Dokument für mein Programm, das eine TabPane enthält. Für jede Registerkarte möchte ich einen eigenen Controller und eine fxml-Datei haben. Wenn ich versuche, die externen fmxl-Dateien in das fxml-Hauptdokument einzufügen, verweigert mein Programm die Ausführung. hier ist mein Haupt FXML Dokument: hier ist eine Kopie meiner Java-DateiFXML Doccument weigert sich, andere fxml-Dateien zu importieren

@Override 
public void start(Stage stage) throws Exception { 
    FXMLLoader fxml = new FXMLLoader(); 
    Parent root = fxml.load(getClass().getResource("FXMLDocument.fxml").openStream()); 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
    FXMLDocumentController fdc = fxml.getController(); 
} 

Fehler:

Caused by: javafx.fxml.LoadException: Base location is undefined. unknown path:97 
+0

Was bedeutet "laufen verweigert"? Erhalten Sie Fehlermeldungen? –

+1

Diese Zeile 'fx: include source =" Tab1.fxml "/>' fehlt am Anfang eine spitze Klammer: '<' – ManoDestra

+0

Fehlende Klammer war ein Tippfehler. Ich habe den Fehler eingefügt, den ich bekomme, wenn ich versuche, es zu laufen. Danke – tashtoons

Antwort

1

Dieser Fehler wird verursacht, weil Sie nicht die location Eigenschaft des FXMLLoader festgelegt haben, und stattdessen Sie geben eine InputStream an, aus der die FXML geladen werden soll. Ich denke, die FXMLLoader muss den Speicherort der ursprünglichen fxml-Datei kennen, um den Speicherort der enthaltenen Datei aufzulösen. Sie sollten die Methode load(InputStream) nur in Ausnahmefällen verwenden: wenn Sie die fxml von einer anderen Quelle als einer Ressource laden (z. B. Datei oder Ressource in der JAR-Datei Ihrer Anwendung).

Verwenden Sie stattdessen

FXMLLoader fxml = new FXMLLoader(); 
fxml.setLocation(getClass().getResource("FXMLDocument.fxml")); 
Parent root = fxml.load(); 

oder äquivalent

FXMLLoader fxml = new FXMLLoader(getClass().getResource("FXMLDocument.fxml")); 
Parent root = fxml.load(); 
+0

Vielen Dank – tashtoons

+0

Ich konnte es mit einem 'InputStream' arbeiten, indem ich den absoluten Pfad der enthaltenen fxml-Datei im fx: include-Tag verwendete. Ich denke jedoch, dass es besser ist, 'setLocation' zu verwenden. –