Thread non ré exécutable

Résolu
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008 - 5 oct. 2007 à 01:06
Ziman Messages postés 245 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
A voir également:

3 réponses

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
5 oct. 2007 à 09:53
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
3
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
5 oct. 2007 à 18:50
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
0
Ziman Messages postés 245 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 26 septembre 2008
5 oct. 2007 à 19:47
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
0
Rejoignez-nous