OVH Cloud OVH Cloud

lancer un événement

2 réponses
Avatar
Christophe M.
J'arrive à généer un événement depuis une classe, avec la méthode
habituelle des listeners, et une fonction notify qui va boucler sur la
liste des listeners et appeler la méthode correspondante sur chaque
listener :

private void notifySQLAlert(){
sqle = new SQLEvent (this, type, strmessage);
Vector vtemp = (Vector)SQLlisteners.clone();
for (int x = 0; x < vtemp.size(); x++){
SQLListener target = null;
target = (SQLListener)vtemp.elementAt(x);
target.SQLAlert(sqle);
}
}
}
(exemple vu sur http://www.devarticles.com/art/1/629/2)

sur toute les docs que j'ai trouvé, tout ceci est fait d'un seul coup,
sur le thread courant.
Est-ce que ça veut dire qu'un deuxième listener ne sera pas "prévenu" de
l'événement tant que le premier de la liste n'a pas fini sa méthode
SQLAlert() ?
N'est-ce pas plus mieux de faire :

private void notifySQLAlert(){
sqle = new SQLEvent (this, type, strmessage);
Vector vtemp = (Vector)SQLlisteners.clone();
for (int x = 0; x < vtemp.size(); x++){
SQLListener target = null;
target = (SQLListener)vtemp.elementAt(x);
new Thread(
new Runnable(){
public void run(){
target.SQLAlert(sqle);
}
}
).start();
}
}
}

Ce qui lancera un thread pour générer l'évenement sur chaque listener.
(évidemment c'est pas super léger comme traitement...)
N'est pas plus logique ? Plus correcte ?
Ou alors j'ai pas encore tout compris ?

2 réponses

Avatar
Nicolas Delsaux
Le 19.09 2003, "Christophe M." s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"

J'arrive à généer un événement depuis une classe, avec la méthode
habituelle des listeners, et une fonction notify qui va boucler sur la
liste des listeners et appeler la méthode correspondante sur chaque
listener :

Tout ça c'est bien joli (et, promis, je ne dirais rien sur le fait que tu

utilises ces saloperies ignominieuses de Vector), mais il existe dans Swing
un thread spécifique pour traiter les événements. Les gérer à la main, en
dehors de Swing, c'est une bonne idée, mais il faut le faire à la mode
Swing, c'est-à-dire avec un thread dédié qui empile et dépile les
événements, sinon, tu vas te battre comme un galérien. Fais donc un
EventManager séparé, et ça ira beaucoup mieux.

--
Nicolas Delsaux
"L'important n'est pas de se libérer du corps, mais de se libérer du
mental. Ce n'est pas le corps qui nous empètre mais l' esprit."
Thomas Merton - Journal d'Asie

Avatar
Christophe M.
Nicolas Delsaux wrote:
Le 19.09 2003, "Christophe M." s'est levé(e) et s'est
dit "tiens, je vais écrire aux mecs de fr.comp.lang.java"


J'arrive à généer un événement depuis une classe, avec la méthode
habituelle des listeners, et une fonction notify qui va boucler sur la
liste des listeners et appeler la méthode correspondante sur chaque
listener :



Tout ça c'est bien joli (et, promis, je ne dirais rien sur le fait que tu
utilises ces saloperies ignominieuses de Vector), mais il existe dans Swing
un thread spécifique pour traiter les événements. Les gérer à la main, en
dehors de Swing, c'est une bonne idée, mais il faut le faire à la mode
Swing, c'est-à-dire avec un thread dédié qui empile et dépile les
événements, sinon, tu vas te battre comme un galérien. Fais donc un
EventManager séparé, et ça ira beaucoup mieux.



Ben heureusement que tu dis rien, parce que c'est pas mon code, c'était
un exemple trouvé sur internet ;-)

Donc, si je comprends bien, le mieux est d'utiliser
EventQueue.invokeLater() ?
Bon, comme tu l'as dis c'est pas une appli graphique, donc faut que je
refasse cette classe, mais c'est bien ça l'idée ?