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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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.

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.