2017-01-08 6 views
0

Ich habe ein Stück Code, das dies tut:java: Action Variable enthält Aktion selbst zu ändern - ‚Variable möglicherweise nicht initialisiert wurden‘

  1. erstellt eine Action

    ein. Entfernt sich von der Taste, an der es angebracht wird (siehe 2.)

    b. Gibt es einige andere Sachen

  2. fügt hinzu, dass Action auf eine Schaltfläche

(in Code :)

ActionListener playButtonActionListener = new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent ae) { 
     playButton.removeActionListener(playButtonActionListener); 
     // does some other stuff 
    } 
}; 

playButton.addActionListener(playButtonActionListener); 

Beim Übersetzen Java berichtet Zeile 4 als Fehler (variable playButtonActionListener might not have been initialized) und weigert sich zu kompilieren. Dies liegt wahrscheinlich daran, dass playButtonActionListener nicht vollständig bis zur schließenden Klammer initialisiert wird und removeActionListener(playButtonActionListener) nach der Initialisierung von playButtonActionListener ausgeführt werden muss.

Gibt es eine Möglichkeit, das zu beheben? Muss ich die Art, wie ich diesen Block schreibe, komplett ändern? Oder gibt es eine Art @ Flag oder eine andere Lösung?

+0

Und ja, es ist ** ** ein Duplikat, trotz allem, was Sie geschrieben (was ich entfernt) . –

+0

Das ist wahr; aber es war nicht genau ein Duplikat in der Art, wie ich erwartet hatte, dass der Post markiert wurde. Ich glaube, ich habe die Liste nicht hart genug durchsucht. Vielen Dank. – HewwoCraziness

+0

Verstehe, dass es kein * exaktes * Duplikat sein muss. Der Zweck dieser Website besteht nicht darin, Ihnen eine genaue Code-Lösung zu geben, sondern robuste Antworten auf allgemeine Fragen zu geben. Die Lösung "Wie greife ich auf ein anonymes Objekt im Objekt selbst zu?" Wurde bereits gut beantwortet. –

Antwort

1

ändern

playButton.removeActionListener(playButtonActionListener); 

mit:

playButton.removeActionListener(this); 

Da Sie in der Action anonyme Klasse sind, dann stellt this die aktuelle Instanz der Klasse.

+0

Danke; Ich werde diese Antwort so schnell wie möglich annehmen! – HewwoCraziness

1

Das Objekt, das Sie entfernen möchten, ist der Hörer selbst, so dass Sie es über this zugreifen:

ActionListener playButtonActionListener = new ActionListener() { 
     @Override 
     public void actionPerformed(ActionEvent ae) { 
      playButton.removeActionListener(this); 
      // does some other stuff 
     } 
    }; 

    playButton.addActionListener(playButtonActionListener); 
+0

Vielen Dank; Ich werde diese Antwort so schnell wie möglich annehmen! – HewwoCraziness

Verwandte Themen