fx:include

Um komplexere Darstellungen mit JavaFX zu erzeugen, ist es sinnvoll, die grafischen Elemente miteinander zu verschachteln. Hierzu kann in FXML die Anweisung fx:include verwendet werden.

Ein Problem, auf das ich gestoßen bin, war, dass immer wieder NullPointerExceptions oder LoadExceptions aufgetreten sind, die ich mir nicht erklären konnte. Z. B.:

Exception in Application start method
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:403)
	at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:47)
	at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:115)
	at java.lang.Thread.run(Thread.java:744)
Caused by: javafx.fxml.LoadException: Base location is undefined.

Die Ursache lag daran, dass der Ort der fxml-Dateien dem Loader nicht bekannt war. Zwar gibt man in der Regel beim Laden (FXMLLoader.load()) den Ort der fxml-Datei an, jedoch findet der Loader die mit fx:include eingefügten Dateien nicht. Hierzu muss die Location dem Loader bekannt gemacht werden:

  String fxmlFile = "/fxml/personTitled.fxml";
  URL location = getClass( ).getResource( fxmlFile );

  FXMLLoader loader = new FXMLLoader( );
  loader.setLocation( location );
  Parent rootNode = (Parent) loader.load( getClass( ).getResourceAsStream( fxmlFile ) );

  Scene scene = new Scene( rootNode, 600, 300 );
  stage.setScene( scene );
  stage.show( );

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.