bonjour,
j'ai un petit problème, j'ai créé un pseudo object graphique (une surcharge d'un JPanel avec plusieurs composants dedans)
j'ai rajouté cette méthode :
Le tout va avec la définition de la liste des listeners, et d'autre bout de code qui vont avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void addActionListener(ActionListener listener) { actionListenerList.add(new WeakReference<ActionListener>(listener)); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 private ArrayList<WeakReference<ActionListener>> actionListenerList = new ArrayList<WeakReference<ActionListener>>(); public void removeActionListener(ActionListener rlistener) { for(WeakReference<ActionListener> listener : new ArrayList<WeakReference<ActionListener>>(actionListenerList)) { if(listener != null && listener.get() != null && listener == rlistener) { actionListenerList.remove(listener); } } }
Quand je dois notifier mes abonnés, j'utilise ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 System.out.println("taille liste : " + actionListenerList.size()); for(WeakReference<ActionListener> listener : actionListenerList) { System.out.println("listener..."); if(listener != null && listener.get() != null) { System.out.println("OK -> notification"); listener.get().actionPerformed(evt); } }
et je m'enregistre auprès de ce composant comme çà :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 myComp.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("plop"); } });
Voici mon problème : quand je suis en debug tout ce passe bien, quand je suis en mode normal :est faux, donc je notifie personne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part listener.get() != null
Je ne comprend pas bien pourquoi la référence passe à null quand je ne suis pas en debug.
Avez-vous une idée ? merci d'avance.
Partager