Hallo liebes Forum,
ich habe folgenden Code mit fünf Klassen:
Main
Controller 1
[CODE lang="java" highlight="17"]public class ConMain implements EventHandler<ActionEvent>{
private GMain gmain;
private RunEinnAusgApp runApp;
public Control(RunEinnAusgApp runApp) {
gMain = new GMain(this);
this.runApp = runApp;
}
@Override
public void handle(ActionEvent event) {
Object o = event.getSource();
if (o == gMain.getBtnBook()) {
runApp.getPrimStage().setScene(runApp.getConBook.getScenegBook());
System.out.println("Button Buchen geklickt");
}
}//handle
public GMain getgMain() {
return gMain;
}
[/CODE]
Controller 2
Gui Main
Gui Book
Es wird eine NullPointer-Ecxeption ausgeworfen im Controller 1 Zeile 17, bei dem Wechselversuch der Scene.
Ich nehme an, dass es an der Erstellung der Objekte liegt. Aber ich bin irgendwie der Meinung, dass die Reihenfolge korrekt ist und eigentlich auch die Scenen erstellt sein müssten, bevor die handle-Methoden aufgerufen werden.
Wenn ich mein Programm umstelle und einen Controller nehme, statt wie hier zwei, dann klappt auch der Wechsel der Scnene wunderbar. Dort werden die beiden GUI-Objekte einwandrei erstellt und die getScene klappt wunderbar.
Aber wenn ich vom Controller 1 aus ein Objekt zurückgehe, also zur RunEinnAusgApp zurück und von dort Controler 2 aufrufe um vom dessen GUI-Objekt die Scene zu getten, dann gibt es einen NullPointer. Aber in der RunEinnAusgApp habe ich ja im Konstruktor die beiden Contoller erstellt und innerhalbe der Controller werden ja die GUI-Klassen-Objekte erstellt und darin jeweils die Scene's. Wo ist mein Denkfehler?
ich habe folgenden Code mit fünf Klassen:
Main
Java:
public class RunEinnAusgApp extends Application {
private Stage stage;
private ConMain conMain;
private ConBook conBook;
public RunEinnAusgApp() {
conMain = new ConMain(this);
conBook = new ConBook(this);
}
@Override
public void start(Stage primaryStage) {
try {
stage = primaryStage;
stage.setScene(conMain.getgMain().getSceneGMain());
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
public Stage getPrimStage() {
return stage;
}
}//RunEinnAusgApp
Controller 1
[CODE lang="java" highlight="17"]public class ConMain implements EventHandler<ActionEvent>{
private GMain gmain;
private RunEinnAusgApp runApp;
public Control(RunEinnAusgApp runApp) {
gMain = new GMain(this);
this.runApp = runApp;
}
@Override
public void handle(ActionEvent event) {
Object o = event.getSource();
if (o == gMain.getBtnBook()) {
runApp.getPrimStage().setScene(runApp.getConBook.getScenegBook());
System.out.println("Button Buchen geklickt");
}
}//handle
public GMain getgMain() {
return gMain;
}
[/CODE]
Controller 2
Java:
public class ConBook implements EventHandler<ActionEvent>{
private GBook gBook;
private RunEinnAusgApp runApp;
public Control(RunEinnAusgApp runApp) {
gBook = new GBook(this);
this.runApp = runApp;
}
@Override
public void handle(ActionEvent event) {
Object o = event.getSource();
if (o == gMain.getBtnBack()) {
runApp.getPrimStage().setScene(runApp.getConMain.getScenegBook());
System.out.println("Button ZURÜCK geklickt");
}
}//handle
public GBook getgBook() {
return gBook;
}
Gui Main
Java:
public class GMain {
BorderPane layout;
Scene sceneGMain;
private Button btnAnalyze;
private Button btnBook;
private Button btnEdit;
private Control conMain;
public GMain(Control conMain) {
layout = new BorderPane();
sceneGMain = new Scene(layout, 800,600);
this.conMain = conMain;
btnAnalyze = new Button(ConVar.CVMain.btnTxtAnalyze);
btnBook = new Button(ConVar.CVMain.btnTxtBook);
btnBook.setOnAction(this.conMain);
btnEdit = new Button(ConVar.CVMain.btnTxtEdit);
setLayout();
}//constr
public void setLayout () {
HBox btnHBox = new HBox(30);
btnHBox.getChildren().addAll(btnAnalyze, btnBook, btnEdit);
layout.setBottom(btnHBox);
}
public Scene getSceneGMain() {
return sceneGMain;
}
public Button getBtnBook() {
return btnBook;
}
}//class
Gui Book
Java:
public class GBook {
private BorderPane layout;
private Scene sceneBook;
private Control conMain;
private final Button btnBack;
public GBook(Control conBook) {
this.conBook = conBook;
layout = new BorderPane();
sceneBook = new Scene(layout, 800,600);
Label l = new Label("Seite Gui Book");
l.setFont(Font.font(100));
layout.setCenter(l);
btnBack = new Button("zurück zum Hauptfenster");
btnBack.setOnAction(this.conMain);
layout.setBottom(btnBack);
BorderPane.setAlignment(btnBack, Pos.CENTER);
}//constr
public Scene getScenegBook() {
return sceneBook;
}
public Button getBtnBack() {
return btnBack;
}
}//GBook
Es wird eine NullPointer-Ecxeption ausgeworfen im Controller 1 Zeile 17, bei dem Wechselversuch der Scene.
Ich nehme an, dass es an der Erstellung der Objekte liegt. Aber ich bin irgendwie der Meinung, dass die Reihenfolge korrekt ist und eigentlich auch die Scenen erstellt sein müssten, bevor die handle-Methoden aufgerufen werden.
Wenn ich mein Programm umstelle und einen Controller nehme, statt wie hier zwei, dann klappt auch der Wechsel der Scnene wunderbar. Dort werden die beiden GUI-Objekte einwandrei erstellt und die getScene klappt wunderbar.
Aber wenn ich vom Controller 1 aus ein Objekt zurückgehe, also zur RunEinnAusgApp zurück und von dort Controler 2 aufrufe um vom dessen GUI-Objekt die Scene zu getten, dann gibt es einen NullPointer. Aber in der RunEinnAusgApp habe ich ja im Konstruktor die beiden Contoller erstellt und innerhalbe der Controller werden ja die GUI-Klassen-Objekte erstellt und darin jeweils die Scene's. Wo ist mein Denkfehler?