Listener et WeakReference null ?
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 :
Code:
1 2 3 4
| public void addActionListener(ActionListener listener)
{
actionListenerList.add(new WeakReference<ActionListener>(listener));
} |
Le tout va avec la définition de la liste des listeners, et d'autre bout de code qui vont avec :
Code:
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:
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:
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 :
Code:
listener.get() != null
est faux, donc je notifie personne.
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.