JavaFX Verständnisfrage EventHandler<ActionEvent> Implementierung in meiner Klasse

BigMemo007

Aktives Mitglied
Hallo liebes Forum,

habe in meine Klasse MyActionHander den EventHander<ActionEvent> implementiert und nantürlich die abstrakte Methode hande(ActionEvent event) auch.

Folgender Code funktioniert wunderbar:

Java:
public class MyActionHandler implements EventHandler<ActionEvent>{
    
    
    @Override
    public void handle(ActionEvent event) {
    
        Object o = event.getSource();
        MyObjects myObjects = GUIBooking.getMyObjects();
        
        if (o == myObjects.getBtnRemItemIncome()) {
            System.out.println("Einnahmen-Eintrag löschen");
            
        } else if (o == myObjects.getBtnAddItemIncome()) {
            System.out.println("Einnahmen-Eintrag hinzufügen");
        
        } else if (o == myObjects.getBtnRemItemOutgoings()) {
            System.out.println("Ausgaben-Eintrag löschen");
            
        } else if (o == myObjects.getBtnAddItemOutgoings()) {
            System.out.println("Ausgaben-Eintrag hinzufügen");
        }
        
    }
}//end class

aber folgender Code wirft NullPointer-Exceptions aus

Java:
public class MyActionHandler implements EventHandler<ActionEvent>{
    
    MyObjects myObjects;
    
    public MyActionHandler(){
        myObjects = GUIBooking.getMyObjects();
    }
    
    @Override
    public void handle(ActionEvent event) {
    
        Object o = event.getSource();
        
        if (o == myObjects.getBtnRemItemIncome()) {
            System.out.println("Einnahmen-Eintrag löschen");
            
        } else if (o == myObjects.getBtnAddItemIncome()) {
            System.out.println("Einnahmen-Eintrag hinzufügen");
        
        } else if (o == myObjects.getBtnRemItemOutgoings()) {
            System.out.println("Ausgaben-Eintrag löschen");
            
        } else if (o == myObjects.getBtnAddItemOutgoings()) {
            System.out.println("Ausgaben-Eintrag hinzufügen");
        }
        
    }
}//end class

Der 2. Code hätte den Vorteil, dass das Objekt myObject einmal zugewiesen werden müsste und nicht bei jedem Button-Klick neu. Warum wirft der 2. Code NullPointer-Exceptions aus?
 
Dazu wird man dir mit den vorliegenden Informationen wohl nichts sagen können. Wie ist denn GUIBooking aufgebaut? Vermutlich liefert getMyObjects() null zurück zu dem Zeitpunkt, an dem Du MyActionHandler erstellst.

Das ist aber auch ein schlechter Aufbau - Du scheinst hier mit statischen Variablen / Methoden zu arbeiten. Besser wäre da ein Konstrukt wie:
Java:
public class MyActionHandler implements EventHandler<ActionEvent>{
    
    MyObjects myObjects;
    
    public MyActionHandler(final MyObjects myObjects){
        this.myObjects = myObjects;
    }

Somit kannst Du die Instanz von MyObjects mit übergeben. Aber das nur ganz am Rande. Generell neige ich auch dazu, die Behandlung aufzuteilen. Dann wäre bei jedem Button eine eigene Methode, die aufgerufen wird. Und das gehört dann auch nicht in eine eigene Klasse sondern kann direkt in der Klasse stattfinden, in der auch die Buttons sind / erstellt werden.
 

Neue Themen


Zurück
Oben