Bonjour,
Je souhaiterais exécuter une action A1 dans un thread et attendre que A1 soit terminée pour lancer une 2eme action A2 (qui elle ne doit pas être lancée à partir d'un thread). Quelqu'un sait-il comment faire ça ?
Merci d'avance
Bonjour,
Je souhaiterais exécuter une action A1 dans un thread et attendre que A1 soit terminée pour lancer une 2eme action A2 (qui elle ne doit pas être lancée à partir d'un thread). Quelqu'un sait-il comment faire ça ?
Merci d'avance
Bonjour,
Je dirais que plusieurs réponses sont possibles selon la nature des actions A1 et A2.
Si A1 est une tâche de calcul (par exemple) et que A2 attend un résultat de A1 pour executer une tache dans l'EDT, un SwingWorker me semble bien indiqué.
Voilà une solution possible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class TonSwingWorker extends SwingWorker { @Override public Object doInBackground() { // Execution de la tache A1 return null; } @Override protected void done() { get(); // methode bloquante qui attend la fin de doInBackGround() // Execution de la tache A2 } } new TonSwingWorker().execute;
A toi de préciser un peu ce que tu veux faire.
Philippe.
Salut,
si tu utilise la classe Thread il y a la methode join() qui permet me semble t'il de faire ce que tu veux.
Bonjour,
Merci pour vos réponses.
Pour répondre à pverley, ta solution me semble intéressante mais je développe en 1.5 donc pas de SwingWorker (ça donne envie de passer en 1.6)... de plus, les 2 taches sont du calcul...
Pour répondre à Rom, dans mon cas si, car l'action A2 doit obligatoirement être exécutée apres A1. Sans trop rentrer dans les détails, le problème est que dans A2, j'appelle une dll qui m'a été fourni par une société et qui ne doit pas être appelée dans un thread sinon ça crashe pour une raison que j'ignore donc je suis obligé de me trainer cette contrainte. Donc voila pourquoi A2 ne doit pas être exécutée dans un thread et doit attendre la fin de A1 qui elle prend un certain temps de calcul donc je souhaiterais l'exécuter dans un thread pour éviter le blocage de l'IHM.
Je découvre les thread donc je ne connais pas tout, je vais essayer d'utiliser la méthode join() comme me l'indique ata2. Si vous avez des exemples de code je suis preneur...
En tout cas encore merci
Effectivement je viens de m'en rendre compte. J'ai appelé monThreadAction1.join() dans l'EDT et bien sur ça m'a bloqué l'IHM... alors je ne vois pas comment faire puisqu'il ne faut pas attendre la fin de A1 dans l'EDT mais il ne faut pas non plus lancer A2 dans un thread...
Partager