-
Probleme avec JDialog
Bonjour à vous tous...
J'ai un petit probleme qui est le suivant:
J'ai une in terface JFrame comme principale, et avec la quelle je peux ouvrir des fenetres secondaires de type JDialog, deriere ces fenetres ya des thread qui s'executent, mais quand je ferme les fenetres, les threads resterant active et j'ai pas trouver un moyens de les arréter quand je ferme ma fenetre ( j'ai utilisé thread.stop() mais sans succes), j'ai essayé aussi de faire un JFrame au lieu de JDialog et c'est la meme chose, alors comment puis-je arreter les Threads lors de la fermeture de la fenetre secondaire sans fermer tt le programme?... Alr plz aidez moi
Merci les amis
-
Normalement on stop un thread en s'arrangeant simplement pour que sa méthode run retourne.
Une solution c'est de déclarer une valeur booléenne volatile dans le thread, qui est testée régulièrement et qui provoque typiquement une sortie de boucle. Cette valeur peut ensuite être settée depuis un thread extérieur par un appel à quelque chose comme monThread.setStop(true);
-
Les Threads une fois lancés sont des processus indépendants. Donc tu ne peux pas les arrêtrer avec des méthodes du genre Thread.stop ou Thread.kill ou n'importe quelle autre du genre. Le problème ne vient pas de tes JDialog.
Demande à tes Thread de contrôler (dans la méthode run) une valeur (booléen) qui change lorsque la JDialog se ferme. Alors la méthode run du Thread finira son execution, detruisant celui-ci.
EDIT:
Désolé, _skip, j'ai dû répondre au moment où tu postais :-S
-
Oui c sa le probleme , comment je change la valeur boolean lors de click sur x du JFrame par exemple???
-
Il y a une interface (WindowListener je crois - pas sûr) qui permet de donner des actions à faire lors par exemple du clic dans la croix de la fenêtre. donc à ce moment-là, tu peux surcharger la méthode windowClosing ou bien WwindowClosed, faire un setDoitSArreter=true (doitSArreter étant le boolean créé avec le Thread et toujours à false jusqu'à présent) et dans ton Thread, tu demande de lire cette variable. if(!getDoitSArreter){actionsQuandIlEstActif();} Quand il n'a plus rien à faire, il est détruit.
-
Oui c'est bon, j'ai cru que WindowClosing marche avec Frame et non pas JFrame... Merci sa marche bien...