JavaFX Komische konsolen Ausgabe (nur roter Pfad)

programmierer12

Bekanntes Mitglied
Hallo zusammen,
ich habe mal wieder angefangen mit JavaFX zu arbeiten und jetzt habe ich ein Problem. Ich lade eine FXML-Datei und bekomme als Ausgabe auf der Konsole nur den Pfad zu dieser Datei, nebenbei tut sich auf der Gui NICHTS! Wenn ich eine andere FXML-Datei angebe die ich schon mal verwendet habe, dann funktioniert alles. Was könnte dafür denn der Auslöser sein? Kann es sein, dass mein selbst erstelltes Widget für den SceneBuilder das Problem verursacht (obwohl ich es nicht verwende)?

MFG
programmierer12
 
Vielleicht kannst du ein paar mehr Informationen liefern. Ein kurzes Beispiel. Ein kleines FXML, das funktioniert und dann deines, dass nicht funktioniert. Spontan habe ich leider gerade keinen Einfall dazu... Sorry.
 
Vielleicht kannst du ein paar mehr Informationen liefern. Ein kurzes Beispiel. Ein kleines FXML, das funktioniert und dann deines, dass nicht funktioniert. Spontan habe ich leider gerade keinen Einfall dazu... Sorry.

Sorry den Code habe ich natürlich vergessen *schäm*
Mitlerweilen habe ich auch schon mal eine neue FXML-Datei erstellt, mit der es aber auch nicht geklappt hat! Deswegen habe ich die ControllerClass noch einmal neu geschrieben wonach es funktioniert hat. An was es gelegen hat weiß ich nicht!

Hier noch mal die alte Controller Klasse, die nicht funktioniert hat:
Java:
import java.net.URL;
import java.time.LocalDate;
import java.util.ResourceBundle;

import de.reservierungsplan.Main;
import de.widget.KundenWidget;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;

public class RootController implements Initializable {
  
   Main main = new Main();

  @FXML
  private ResourceBundle resources;

  @FXML
  private URL location;

  @FXML
  private Menu menu_Bearbeiten;

  @FXML
  private MenuItem menu_Close;

  @FXML
  private MenuBar MenuBar;

  @FXML
  private Menu menu_Hilfe;

  @FXML
  private Menu menu_Datei;

  @FXML
  private MenuItem menu_Über;
  
  @FXML
  private MenuItem menu_abmelden;

  @FXML
  private MenuItem menu_user_bearbeiten;
  
  @FXML
  private KundenWidget kunde;
  
  @FXML
  void close(ActionEvent event) {

     Platform.exit();
     System.exit(0);
    
  }

  @FXML
  void über(ActionEvent event) {

    
    
  }
  
  @FXML
  void abmelden(ActionEvent event){
    
     main.goToLogin();
    
  }

  @FXML
  void user_bearbeiten(ActionEvent event){
    
     main.goToUserBearbeiten();
    
  }
  
  @FXML
  void initialize() {
  assert menu_Bearbeiten != null : "fx:id=\"menu_Bearbeiten\" was not injected: check your FXML file 'Root.fxml'.";
  assert menu_Close != null : "fx:id=\"menu_Close\" was not injected: check your FXML file 'Root.fxml'.";
  assert MenuBar != null : "fx:id=\"MenuBar\" was not injected: check your FXML file 'Root.fxml'.";
  assert menu_Hilfe != null : "fx:id=\"menu_Hilfe\" was not injected: check your FXML file 'Root.fxml'.";
  assert menu_Datei != null : "fx:id=\"menu_Datei\" was not injected: check your FXML file 'Root.fxml'.";
  assert menu_Über != null : "fx:id=\"menu_Über\" was not injected: check your FXML file 'Root.fxml'.";

  }

   @Override
   public void initialize(URL arg0, ResourceBundle arg1) {

     kunde.setVorname("Hans");
     kunde.setNachname("Hansen");
     kunde.setAbreise(LocalDate.parse("05.11.2015"));
    
   }
}
 
Zuletzt bearbeitet von einem Moderator:
Wieso hast du zwei initialize Methoden?

implements Initializable ist unnötig, initialize() wird automatisch vom FXMLLoader aufgerufen.

public interface Initializable

Controller initialization interface.

NOTE This interface has been superseded by automatic injection of location and resources properties into the controller. FXMLLoader will now automatically call any suitably annotated no-arginitialize() method defined by the controller. It is recommended that the injection approach be used whenever possible.
 
Hier also die zwei Methoden mit denen ich meine FXML lade:
Java:
private static Initializable replaceSceneContent(String fxml) {
     FXMLLoader loader = new FXMLLoader();

     try {
       loader = new FXMLLoader();
       InputStream in = Main.class.getResourceAsStream(fxml);
       loader.setBuilderFactory(new JavaFXBuilderFactory());
       loader.setLocation(Main.class.getResource(fxml));
       Parent page;
       try {
         page = (Parent) loader.load(in);
       } finally {
         in.close();
       }
       page.autosize();
       stage.getScene().setRoot(page);
       stage.sizeToScene();

     } catch (IOException e) {
       System.err.println(e.getMessage());
     }

     return (Initializable) loader.getController();
   }

   private Initializable generateSceneContent(String fxml) throws Exception {
     FXMLLoader loader = new FXMLLoader();
     InputStream in = getClass().getResourceAsStream(fxml);
     loader.setBuilderFactory(new JavaFXBuilderFactory());
     loader.setLocation(Main.class.getResource(fxml));
     Parent page;
     try {
       page = (Parent)loader.load(in);
     } finally {
       in.close();
     }
     Scene scene = new Scene(page, 750, 450);
     stage.setResizable(false);
     stage.setScene(scene);  
     stage.sizeToScene();
     stage.setTitle("Reservierungsplan");
     return (Initializable) loader.getController();

   }

Habe ich übrigens hier im Forum gefunden ...
 
Zuletzt bearbeitet von einem Moderator:
Auf den ersten Blick kommt mir die Lösung etwas kompliziert vor.
Wäre Parent parent = FXMLLoader.load(getClass().getResource("main.fxml")); nicht auch möglich?

Du kannst auch den Inhalt von einem Pane 'content' so ändern:
content.getChildren().setAll(FXMLLoader.load("other.fxml"));
 

Zurück
Oben