JavaFX Warum wird hier eine NullPointer-Exception geworfen?

B

BigMemo007

Aktives Mitglied
Hallo liebes Forum,

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
Java:
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;
    }


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?
 
B

BigMemo007

Aktives Mitglied
Ich habe eben die Controller über die init()-Methode in der RunEinnAusgApp-Klasse (meine Java-FX Main-Klasse) generieren lassen und es gibt keine Exception. Hmm... Wann wird was ausgeführt in der FX-Main? Ist folgende Reihenfolge richtig?

Konstruktor()
main()
init()
start()
stop()

Wenn ja, müsste doch oben auch alles richtig sein. Zuerst werden die Controller im Konstruktor erstellt und dann im Start ausgeführt und verändert. Oder werden die Objekte, die über die Konstruktoren erstellt werden, nicht vollständig erstellt? Etwas checke ich da grad überhaupt nicht.
 
B

BigMemo007

Aktives Mitglied
Da ist aber eine NPE das geringste Problem - der Code ist ja schon syntaktisch falsch: ConBook/ConMain hat einen "Control"-Konstruktor, runApp.getConMain wird schwierig, es gibt in der Klasse keinen getConMain-Member.
Danke für die Infos. Das sind aber nur Fehler hier in meiner Frage im Forum. Ich habe die Klassen leider aus dem Kopf und schnell texten müssen. In meinem Eclipse hatte ich Syntaktisch und inhaltlich alles richtig. Sprich: Konstruktoren, Setter, Getter und alles andere war richtig. Trotzdem kam die NPE. Da ich nun alles auf einem Controller aufbaue, habe ich den alten Code nicht mehr. Deswegen aus dem Kopf.
 
Zuletzt bearbeitet:
B

BigMemo007

Aktives Mitglied
Ok. Dann stell ich mal die Frage anders. Die Erstellung meiner conMain und conBook Objekte. Wären die 1zu1 identisch, wenn sie zum einen im Konstruktor der Klasse RunEinnAusgApp erstellt würden und zum anderen in der überschrieben init()-Methode?
 
J

JustNobody

Top Contributor
Also da du nicht mit fxml zu arbeiten scheinst, wird ggf. einiges funktionieren. Aber ich würde klar dazu raten, sich das JavaFX richtig anzusehen und die jeweiligen Dinge im jeweiligen Event zu machen. Einiges gehört meiner Meinung nach einfach nicht in den Konstruktor.

Dann empfinde ich dein Design als recht fragwürdig. Da hängt alles voneinander ab. Deine App Klasse nutzt die zwei ConXXX Klassen. Diese haben aber auch eine klare Abhängigkeit zur App Klasse .. wobei es ja nicht dabei bleibt, denn die App Klasse kennt sogar die Details dieser Klassen, denn es wird ja auf das Element gMain zugegriffen. Und da das so ja nicht reicht, nutzen sich die beiden Controller gegenseitig....

Sorry, aber das ist in Meinen Augen erst einmal kein sauberes Design und sollte etwas überarbeitet werden....
 
B

BigMemo007

Aktives Mitglied
Ok. Ich habe es wohl blöd gelöst. Mein Ziel ist es, nach Button-Klicks die Scene wechseln zu können. Und ich habe versucht die MVC umzusetzen (die Models habe ich noch nicht eingefügt). Der Button "Buchen" ist erstmal Test. Wie lasse ich in einem sauberen Code die Scene entsprechend in der primaryStage wechseln zu lassen? Ich habe 4 GUIs, d.h. eben auch 4 Scenes.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JavaFX Bei Scenen-Wechsel im primaryStage wird aktuelle Fenstergröße nicht mit übernommen AWT, Swing, JavaFX & SWT 10
M JavaFX javaFX Label-Text wird nicht gesetzt AWT, Swing, JavaFX & SWT 3
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
Zrebna JavaFX-Projekt mit Bildern funktioniert nicht - um Hilfe wird gebeten AWT, Swing, JavaFX & SWT 14
kodela BufferStrategy wird nicht gefunden AWT, Swing, JavaFX & SWT 5
J JPanel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
S ImageView wird dem Gridpane nicht zugefügt AWT, Swing, JavaFX & SWT 1
G Repaint wird nicht durchgeführt AWT, Swing, JavaFX & SWT 8
E Warum wird Text im JTextArea erst am Programmende angezeigt ? AWT, Swing, JavaFX & SWT 1
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing GUI wird nach invokeLater() langsam AWT, Swing, JavaFX & SWT 19
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
L JFrame wird zu klein erstellt AWT, Swing, JavaFX & SWT 7
T JavaFX Nach Zoomen wird an falscher Stelle gezeichnet AWT, Swing, JavaFX & SWT 0
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
cool_brivk24 AWT BufferedImage wird nicht geladen AWT, Swing, JavaFX & SWT 17
S JavaFX Wird es überhaupt genutzt? AWT, Swing, JavaFX & SWT 3
FRI3ND GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Canvas wird nicht angezeigt AWT, Swing, JavaFX & SWT 10
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Wert in JTextField wird falsch ausgegeben AWT, Swing, JavaFX & SWT 2
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
J Aus welchen Grund wird der Button nicht angezeigt im GridPane? AWT, Swing, JavaFX & SWT 1
J MouseListener wird nicht ausgeführt. AWT, Swing, JavaFX & SWT 4
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
J Controller wird zu groß, was tun ? AWT, Swing, JavaFX & SWT 5
UnknownInnocent Wieso wird nur ein Teil meiner Buttons angezeigt? AWT, Swing, JavaFX & SWT 1
T Label wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Aktion ausführen wenn ein JRadiobutton deselektiert wird. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel "ContentPane" wird nicht gesetzt/angezeigt AWT, Swing, JavaFX & SWT 16
I JavaFX Fenster wird auf einem anderen Rechner anders dargestellt AWT, Swing, JavaFX & SWT 5
zhermann FX Label text wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 12
zhermann TableView wird nicht gefüllt AWT, Swing, JavaFX & SWT 14
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
zhermann JavaFX Main App wird nicht geöffnet AWT, Swing, JavaFX & SWT 6
N JavaFX Image wird nicht korrekt geladen AWT, Swing, JavaFX & SWT 3
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing Größe des JPanel ändern/wird nicht geändert. AWT, Swing, JavaFX & SWT 3
DaCrazyJavaExpert Swing JPanel wird in JScollPane nicht angezeigt AWT, Swing, JavaFX & SWT 2
D JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 15
MaxG. JavaFX Inhalt in Tableview wird nicht angezeigt AWT, Swing, JavaFX & SWT 11
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
G Nur ein JPanel wird angezeigt AWT, Swing, JavaFX & SWT 9
M Swing Inhalt meines JTables wird falsch dargestellt AWT, Swing, JavaFX & SWT 8
T Default Table wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
H Musik wird nach dem erstellen der .jar Datei nicht mehr abgespielt AWT, Swing, JavaFX & SWT 1
K JavaFX Stage wird nicht angezeigt AWT, Swing, JavaFX & SWT 9
B JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
A Swing Bild wird nicht mehr geladen AWT, Swing, JavaFX & SWT 4
U Swing Inhalt vom Fenster wird erst durch Hovern oder Klicken sichtbar AWT, Swing, JavaFX & SWT 3
D iText PDF wird nach Neustart nicht importiert AWT, Swing, JavaFX & SWT 0
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
X JavaFX AreaChart area höhe wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 2
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
S Swing Konstruktor wird nicht rechtzeitig fertig? AWT, Swing, JavaFX & SWT 4
D JavaFX Erkennen wenn eine Anwendung geschlossen wird und etwas tun? AWT, Swing, JavaFX & SWT 4
J 2D-Grafik Linie wird nach Mausklick nicht am richtigen Ort gezeichnet AWT, Swing, JavaFX & SWT 11
C Liste - ListView wird nicht angezeigt AWT, Swing, JavaFX & SWT 15
N JavaFX TextArea Updaten bevor Prozess gestartet wird AWT, Swing, JavaFX & SWT 7
B HBox wird nicht im Bottom angezeigt AWT, Swing, JavaFX & SWT 8
T Swing JTable wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
J GUI wird nicht angezeigt AWT, Swing, JavaFX & SWT 17
L JavaFX Node wird nicht korrekt angezeigt AWT, Swing, JavaFX & SWT 7
M Hintergrundbild wird nicht angezeigt AWT, Swing, JavaFX & SWT 1
M JavaFX Scene wird nicht angezeigt AWT, Swing, JavaFX & SWT 4
A Swing Zeichnung wird nicht richtig dargestellt AWT, Swing, JavaFX & SWT 4
A 2D-Grafik Bild wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 24
X Swing Anwendung regaiert auf keine Buttons mehr wärend while(scanner.hasNextLine()) ausgeführt wird. AWT, Swing, JavaFX & SWT 4
H Button in GridPane wird nicht angenommen AWT, Swing, JavaFX & SWT 3
M AWT Panel wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
V JavaFX Media wird aus der Jar nicht geladen AWT, Swing, JavaFX & SWT 0
L ImageIcon auf JPanel wird nicht angezeigt(keiner Fehlermeldung) AWT, Swing, JavaFX & SWT 11
Viktim Array Spielfeld wird in GUI gedreht AWT, Swing, JavaFX & SWT 5
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
V JScrollBar soll weiterscrollen, wenn Inhalt von JTextArea erweitert wird AWT, Swing, JavaFX & SWT 7
T JTextField Array im JPanel wird nicht komplett angezeigt AWT, Swing, JavaFX & SWT 7
I Neues JFrame wird nicht richtig angezeigt AWT, Swing, JavaFX & SWT 5
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
A SWT ScrolledComposite wird nicht angezeigt AWT, Swing, JavaFX & SWT 0
T Swing Image wird nicht geladen AWT, Swing, JavaFX & SWT 1
D PaintComponent wird nicht aufgerufen AWT, Swing, JavaFX & SWT 3
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
V JFrame wird nicht richtig angezeigt! AWT, Swing, JavaFX & SWT 2
H UpdatePolicy wird nicht richtig gesetzt / funktioniert nicht AWT, Swing, JavaFX & SWT 5
T Swing Im JPanel wird nur TextArea gelöscht AWT, Swing, JavaFX & SWT 13
M Button wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
Z Wird die Variable nicht übergeben ? AWT, Swing, JavaFX & SWT 16
D PingPongBall wird nicht angezeigt AWT, Swing, JavaFX & SWT 7
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
T Event Handling JDialog schließen, sobald ein neuer erzeugt wird AWT, Swing, JavaFX & SWT 3
A Swing Koordinatensystem wird gezeichnet verschwindet aber und die Einteilungen bleiben nicht bestehen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben