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

Java Discussion :

[THREAD] Problème isInterrupted() [FAQ]


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut [THREAD] Problème isInterrupted()
    Bonjour à tous!
    J'ai encore un petit souci (pour changer...!) Mais cette fois-ci avec un thread!
    Mon programme lance une interface graphique (Jframe) avec 2 Jbuton :
    un bouton start pour lancer un thread et un bouton stop pour l'arrêter.
    Lorsque l'on clique une première fois sur start le thread se lance bien, mais une fois arrêté, il est impossible de relancer le thread une deuxième fois!
    Voici mon code:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    public class maFenetre extends JFrame implements ActionListener{
    	...
    	Thread1 p = new Thread1();
    	JPanel container = new JPanel();
    	JButton start = new JButton("Start");
    	JButton stop = new JButton("Stop");
    	...
    	public void actionPerformed(ActionEvent e) {
    		if(e.getSource() == start){
    			System.out.println("Etat du thread p : \nStoppé :"+p.isInterrupted()+"\nVivant :"+p.isAlive());
    			if(p.isAlive()==false){
                                    System.out.println("on lance le thread");
    				p.start();
    			}
    		}
    		else if(e.getSource() == stop){
                            p.interrupt();
    		}
    	}
    	...
     
     
    public class Thread1 extends Thread{
    	...
    	public void run(){
    		while(Thread.currentThread().isInterrupted()==false){
    			...
    			try {
            			Thread.sleep(10000);
          		}
          		catch (InterruptedException ex) {
          				System.out.println("Interruption attrapé\nEtat du thread: "+Thread.currentThread().isInterrupted());
          				Thread.currentThread().interrupt();
          				System.out.println("Retest de l'etat du thread: "+Thread.currentThread().isInterrupted());								
    			}
    		}
    	}
    }
    Pourtant juste avant la deuxième relance quand je test l'etat du thread,
    p.isAlive() et p.isInterrupted() me retourne false! Le thread ne veut vraiment pas se relancer!!!!! Je ne vois pas ce qui cloche...

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    salut,

    tu ne peux pas re_start un Thread, la méthode start ne peux etre appelé qu'une seule fois pour un thread..

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Ah! Je ne savais pas ça... Ouai donc c'est comme utiliser Thread.stop() sauf qu'elle n'est pas deprecated.
    J'ai essayé avec Thread.suspend() et Thread.resume() ça marche pas trop mal même si elles sont aussi deprecated.

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    tu peux expliquer ce que tu veux faire??

    ya la méthode destroy() // qui supprime le thread mais elle n'est pas propre..

    Sinon si tu veux executer un traitement; qu'un Thread n'a pas fait..il faut faire

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    En fait c'est un programme qui lit des données sur le port série. Je veux lire sur le port série quand j'appuis sur le Jbuton start et aprés dés que je ne veux plus lire j'appuis sur le Jbuton stop.
    J'avais déja essayé destroy() mais ça n'a pas marché.
    Si je fait new Thread().start() mais du thread qu'a deja tourné ca va pas marché alors?
    Sinon avec Thread.suspend et Thread.resume() ça marche. Il faut juste que je m'arrange pour fermer le port série a chaque fois que je fais un suspend() et a l'ouvrir quand je fais un resume() sinon ça fait couiller mon appli!!!!

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

Discussions similaires

  1. [THREAD] Problème synchronisation
    Par goddet dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 25/10/2006, 09h16
  2. [VB.Net][Threading] Problème de parent ...
    Par maitrebn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/01/2006, 11h05
  3. Thread problème pour l'arreter
    Par rvzip64 dans le forum Langage
    Réponses: 8
    Dernier message: 12/07/2005, 10h51
  4. [Thread]Problème de processus
    Par berg dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 18/06/2005, 20h40
  5. Thread--> problème avec ThreadProc
    Par stof dans le forum MFC
    Réponses: 33
    Dernier message: 08/06/2005, 13h47

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