Thread non ré exécutable [Résolu]

Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
- - Dernière réponse : Ziman
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
- 5 oct. 2007 à 19:47
Bonjour à tous,

j'ai un petit problème avec mon Thread. Je crée donc une classe qui dérive de Thread et je remplis bien ma fonction run(). Je lance une fois le thread grace à start(), aucun soucis elle s'exécute et se termine niquel, seulement voilà, si je réappuye sur le bouton qui fait objet.start(), il me sort une belle "Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException", comme si je ne pouvais pas exécuter à nouveau mon Thread, comment puis-je faire pour que ma fonction se réexécute normalement ? (Il n'y a rien de spécial dans la fonction run)

Merci d'avance

Apprendre le VB6
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
7
3
Merci
Je ne sais pas si tu peux remettre ton thread en état de redémarrer après sont arret, mais une solution est de refaire un "new MyThread" à chaque fois.

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 205 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Nikoui
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
0
Merci
Un Thread une fois exécuté est détruit par le système, il ne peut plus avoir d'état "en cours d'excution", d'où ton exception car il ne peux plus être relancé; du moins par la méthode start; quand je dis détruis je ne parle pas de l'instance de ta classe mais de la resource système associée.
Tu peux réinstancier ta classe, et appeler la méthode start() sur cette nouvelle instance.

Mais;

Le mieux est implementer l'interface Runnable à la place de dériver la classe Thread:
class TaClass implements Runnable
{
  public void run()
  {
    // Action de ton thread
  }
}

Tu instancie une fois ta classe:
TaClass mon_thread= new TaClass();


Et pour lancer, ou relancer ton thread tu n'a plus qu'à faire:
new Thread(mon_thread).start();

Core Breaker
Commenter la réponse de CoreBreaker
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Merci pour vos deux réponses, j'ai choisis la solution de Nikoui, dans mon architecture c'était plus simple à faire et ca fonctionne bien :p

Merci bien

Apprendre le VB6
Commenter la réponse de Ziman