Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 septembre 2008
-
5 oct. 2007 à 01:06
Ziman
Messages postés245Date d'inscriptiondimanche 27 avril 2003StatutMembreDernière intervention26 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)
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 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
CoreBreaker
Messages postés540Date d'inscriptiondimanche 23 mars 2003StatutMembreDernière intervention 5 octobre 20071 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();