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

Langage Java Discussion :

Erreur "java.lang.IllegalThreadStateException" au deuxième appel de start


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut Erreur "java.lang.IllegalThreadStateException" au deuxième appel de start
    Bonjour,

    il doit y avoir quelque chose que je n'ai pas compris dans les états des thread et l’exception java.lang.IllegalThreadStateException

    Je fais ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.out.println("Etat du thread " + this.isAlive());
    if(!this.isAlive())
       this.start();
    Au premier passage il m'affiche
    Etat du thread false
    et tout va bien.
    Puis je rappelle se bout de code (et pour mi je suis sortie du premier run)
    il m'affiche toujours
    Etat du thread false
    et du coup essaye de re-faire un start (et jusque là c’est ce que je veux), et bam, IllegalThreadStateException.

    Il y a quelque chose qui m'échappe du coup.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 585
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Un thread est créé, puis démarré, puis il s'exécute (on dit qu'il est vivant,) puis il s'arrête et meurt.
    Quand il est mort il est mort. On ne peut pas l'exécuter une deuxième fois, il faut créer un nouveau thread.

    Si c'est un problème, l'approche habituelle est de se créer un pool de thread qui bouclent et attendent du travail sans jamais se terminer, et auxquels on fournit du travail. C'est le principe du ThreadPoolExecutor.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    OK, merci.

    Je vais regarder de ce côté là mais ça veut dors et déjà dire que mon approche initiale est pourrie.

    J'ai installé mon système de threads a posteriori sur des classes existante.
    En occurrence j'ai fait hériter une classe existence (qui réceptionne les évènements (implémente ActionListener) et en fait plein de trucs formidables avec) et encapsulé un de ses traitements dans le run.

    Donc en gros, au premier clic pour se traitement ça marche, au deuxième ça explose.

    Je pense que je vais devoir revoir le fonctionnement, utiliser une classe séparée dédiée qui fera le boulot que j'ai mis dans le run (via un paquet d’accesseurs du coup, mais je ferais avec).


    Je reviendrais conclure le topic quand j'aurais quelque chose de viable.

  4. #4
    Membre émérite Avatar de JoeChip
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    536
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 536
    Par défaut
    En fait il suffit de réinstancier ta thread avant le start(). donc à un moment, au lieu de faire "monThread.start()" tu fais juste "new MonThread.start()"

  5. #5
    Membre expérimenté Avatar de Gaillac
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    thelvin a répondu à ma question.
    BenWillard a répondu à mon problème (je ne veux qu'un seul thread de ce type à la fois. Mais je veux qu'il soit interruptible, d'où les threads).
    Ça fait un point pour les 2.

    J'ai sorti la partie "threadée" de ma classe, et j'ai fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if((this.threadDExecution == null) || (!this.threadDExecution.isAlive()))
    {
          this.threadDExecution = new threadExecution(this);
          this.threadDExecution.start();
    }
    J'ai pour l'instant le comportement souhaité, sujet clôt.

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

Discussions similaires

  1. [Thread] [java.lang.IllegalThreadStateException] [Start]
    Par moris113 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 29/05/2007, 16h44
  2. erreur de java.lang.NullPointerException
    Par vince351 dans le forum Langage
    Réponses: 1
    Dernier message: 25/03/2007, 13h29

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