2017-01-08 2 views
0

J'ai un peu de code qui fait cela:java: Variable ActionListener contient des mesures pour modifier lui-même - 'variable pourrait ne pas avoir été initialisé'

  1. Crée un ActionListener

    a. Se retire du bouton auquel il sera attaché (voir 2.)

    b. Est-ce que quelques autres trucs

  2. ajoute que ActionListener à un bouton

(dans le code :)

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

playButton.addActionListener(playButtonActionListener); 

sur la compilation, Java rapports ligne 4 comme une erreur (variable playButtonActionListener might not have been initialized) et refuse de compiler. Cela est probablement dû au fait que playButtonActionListener n'est pas complètement initialisé techniquement jusqu'au crochet de fermeture, et que removeActionListener(playButtonActionListener) doit se produire après l'initialisation de playButtonActionListener.

Y at-il un moyen de résoudre ce problème? Dois-je changer complètement la façon dont j'écris ce bloc? Ou y at-il une sorte de drapeau @ ou une autre solution?

+0

Et oui, il est ** ** un double, en dépit de tout ce que vous avez publié (que j'enlevé) . –

+0

C'est vrai; cependant ce n'était pas exactement un doublon de la manière dont je m'attendais à ce que le poste soit marqué. Je suppose que je n'ai pas cherché assez dur sur la liste. Je vous remercie. – HewwoCraziness

+0

Comprenez qu'il ne doit pas être un double * exact *. Le but de ce site n'est pas de vous donner une solution de code exacte, mais de fournir des réponses robustes aux questions générales. La solution à "comment accéder à un objet anonyme dans l'objet lui-même" a déjà été bien répondu. –

Répondre

1

changement

playButton.removeActionListener(playButtonActionListener); 

avec:

playButton.removeActionListener(this); 

Puisque vous êtes dans la classe ActionListener anonyme, this représente l'instance actuelle de la classe.

+0

Merci; J'accepterai cette réponse dès que possible! – HewwoCraziness

1

L'objet que vous souhaitez supprimer l'auditeur est lui-même, de sorte que vous pouvez y accéder via this:

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

    playButton.addActionListener(playButtonActionListener); 
+0

Merci; J'accepterai cette réponse dès que possible! – HewwoCraziness