Problem mit ActionListener

Luk10

Top Contributor
Hallo,

Ich habe eine kleine Aufgabe bekommen hab sie versucht, es lässt sich alles kompilieren aber mein Programm geht zu laufzeit hoch ... und ich weiß nicht wieso!

Hier der Code:
(Die Methode reifen() ist in der Klasse Apfel programmiert!)

Java:
    public void reifen () {
        int erntezahl = 0;
        if (erntezahl == 0) {
            System.out.println ("Die Früchte sind noch unreif ... es dauert sicher noch lang!");
            erntezahl++;
        }
        else {
            if (erntezahl == 1) {
            System.out.println ("Die Früchte reifen herran.");
            erntezahl++;
        }
        else {
            if (erntezahl == 2) {
            System.out.println ("Die Früchte sind reife ... bitte ernten!");
            erntezahl++;
        }
      }
    }
  } 
}
Java:
import javax.swing.*;
import java.awt.event.*;

public class Baumgrafik  {
  JButton wachsen; 
  Apfel apfel;
 
  Baumgrafik () {
      Apfel apfel = new Apfel();
    }
    
  public void erstelleGUI () {
      JFrame meinFrame = new JFrame();
      wachsen = new JButton ("Wachsen");
      
      wachsen.addActionListener (new Apfellistener());
      
      meinFrame.getContentPane().add(wachsen);
      meinFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      meinFrame.setSize (400,500);
      meinFrame.setVisible (true);
    }
   
    class Apfellistener implements ActionListener {
        public void actionPerformed (ActionEvent event) {
            apfel.reifen();
        }
    }
}
Java:
public class Tester {
  public static void main (String[] args) {
      Tester tester = new Tester();
      tester.los();
    }
    public void los () {
        Baumgrafik meineBG = new Baumgrafik();
        meineBG.erstelleGUI();
    }
}

Was ist hier der fehler? ich will doch nur ein actionEvent das eine methode von einem Objekt aufruft wenn es ausgelöst wird ...

Danke
 
> Apfel apfel = new Apfel();
definiert eine neue lokale Variable apfel, das gleichnamige Klassenattribut bleibt null,

schreibe
apfel = new Apfel();
 
Okay danke erstmal dafür ... passieren immer wieder bei mir diese fehler ...
leider funktioniert die methode jetzt nicht mehr in gewünschter weise ... eigentlich sollte pro drücken erntezahl um eins erhöht werden was nicht der fall ist ...

kann mir jemand eine lösung oder einen tipp vorschlagen?

danke
 
> leider funktioniert die methode jetzt nicht mehr in gewünschter weise ...

pff, als wenn sie vorher funktioniert hätte 😉
von Apfel hast du kein möglicherweise vorhandenes Klassenattribut gepostet,

int erntezahl = 0; in reifen() beginnt aber offensichtlich als lokale Variable immer von vorne
 
Im Konstruktor für die Klasse Baum oder so steht dieser Code
Java:
Apfel apfel = new Apfel();
Dadurch, dass du die Variable im Konstruktor neu definierst (Apfel steht davor), "verdeckt" diese Lokale Variable die Globale
--> Das Feld apfel ist nicht erzeugt --> Es wird wahrscheinlich eine NullPointerException werfen
Schreib also einfach im Konstruktor:
Java:
apfel = new Apfel();
 
cO danke slaterB ...

ja das dämliche edieren von den klasse auf fehlersuche ... da passiert sowas eben ...

vielen dank an alle
 

Zurück
Oben