IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDT/SwingWorker Java Discussion :

Attendre la fin d'un thread


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut Attendre la fin d'un thread
    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

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2007
    Messages : 80
    Par défaut
    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é.

    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;
    Voilà une solution possible.
    A toi de préciser un peu ce que tu veux faire.

    Philippe.

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par apmic Voir le message
    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
    Dans quel cas tu as besoin de faire ça? Car lancer un thread pour exécuter une action, et attendre qu'il soit fini pour continuer, ça ne sert un peu à rien...

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Par défaut
    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.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    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

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par apmic Voir le message
    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.
    Si c'est pour éviter le bloquage de l'IHM, il faut certes le lancer dans un thread séparé, mais dans ce cas-là il ne faut pas attendre la terminaison du thread dans l'EDT (sinon tu seras quand même bloqué, que le traitement se passe dans l'EDT ou non).

  7. #7
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 7
    Par défaut
    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...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Executor] Attendre la fin d'un thread
    Par onlytoine dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 24/05/2012, 10h30
  2. attendre la fin d'un thread
    Par gastoncs dans le forum VB.NET
    Réponses: 1
    Dernier message: 02/03/2012, 18h02
  3. Attendre la fin d'un thread: Access violation
    Par Booster2ooo dans le forum Delphi
    Réponses: 5
    Dernier message: 15/04/2007, 10h31
  4. [thread]attendre la fin d'un thread?....
    Par babarpapa dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 29/03/2006, 14h31
  5. [Thread] comment attendre la fin d'un thread?
    Par billynirvana dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 24/08/2005, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo