Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Probleme de relance d'un thread java.lang.IllegalThreadStateException [ Divers / Général ] (pouicky)

dimanche 18 mars 2007 à 17:31:31 | Probleme de relance d'un thread java.lang.IllegalThreadStateException

pouicky

Bonjour codes sources. Je vous soumets ce qui reste un mystere après moulte reherches et tests et force débogage.
Je cherche à implementer une communication depuis un thread vers l'EventDispatchThread.
J'ai un probleme lorsque je lance un thread (qui est censé etre arrété) pour la deuxieme fois:
Le message "java.lang.IllegalThreadStateException" est généré alors que le thread est mort. Normalement ce message arrive si le thread est en cours.Problème de Garbage collector?, de conflit entre le thread et l'EventDispatchThread ? Je n'ai pas trouvé d'explication théorique, alors je compte sur votre expérience pour me débloquer.
 voici la source : (Le code est une application qui tourne et qui illustre le bug - Merci de vos réponses éclairées)
package testThread;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;


public class Test extends JFrame {
    private ThreadChargement threadChargement=null;
    private JPanel jContentPane = null;
    private JButton jButton = null;  //  @jve:decl-index=0:visual-constraint="302,-21"
    private JLabel jLabel = null;  //  @jve:decl-index=0:visual-constraint="478,113"

//Constructeur
    public Test(){
    super();
    this.setTitle("lancer deux fois le thread pour constater le message d'erreur");
    this.setSize(new Dimension(500,120)); 
    this.setContentPane(getJContentPane());

//debut de la partie critique
    getJButton().addActionListener(new java.awt.event.ActionListener(){
        public void actionPerformed(java.awt.event.ActionEvent e) {
        System.out.println("Clic sur Boutton");
        try {
            charger();
        } catch (Exception e1) {
            final Exception ex=e1;
            SwingUtilities.invokeLater(new Runnable() {
            public void run(){
                getJLabel().setText(ex.toString() + " ; Message="+ex.getMessage());
            }
            });
            System.err.println(e1.toString());
        }
        }
    });
    this.setVisible(true);
    }
    public void charger(){
    if (threadChargement==null)
        threadChargement=new ThreadChargement();
    while(threadChargement.isAlive()){} //on attend que le thread soit stoppé (pour être sûr)
    threadChargement.start();
    }

    class ThreadChargement extends Thread {
    public Boolean actif=false;
    public void run(){
        actif=true;
        SwingUtilities.invokeLater(new Thread() {
        public void run(){
            getJLabel().setText("je suis un message emis dans l'EDT depuis le Thread chargement");
        }
        });
        System.out.println("coucou depuis le thread de chargement");
        actif=false;
    }
    }
//fin de la partie critique 
   
//accesseurs pour les composants
    private JPanel getJContentPane() {
        if (jContentPane == null) {
        jContentPane = new JPanel();
        jContentPane.setLayout(new BorderLayout());
        jContentPane.add(getJButton(),BorderLayout.CENTER);
        jContentPane.add(getJLabel(),BorderLayout.SOUTH);
        }
        return jContentPane;
    }
    private JButton getJButton() {
        if (jButton == null) {
        jButton = new JButton("lancer le thread");
        }
        return jButton;
    }
    private JLabel getJLabel() {
        if (jLabel == null) {
        jLabel = new JLabel();
        jLabel.setText("JLabel");
        jLabel.setSize(new Dimension(141, 50));
        }
        return jLabel;
    }

//methode MAIN
    public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
          public void run() {
              new Test();
          }
     });
    }
}

Imaginer, c'est retrouver un déjà vu que l'on ne connaissait pas.




Cette discussion est classé dans : public, jlabel, thread, jbutton, threadchargement


Répondre à ce message

Sujets en rapport avec ce message

Swing et Thread [ par Ombitious_Developper ] Salut:J'ai un problème de synchronisation de l'affichage du fond des objets de la classe JLabel.// Classe principale public class MainClass probleme pour changer le txt d'un jlabel [ par nykaula ] voila, je test ce petit script et le but est que quand je clic sur un bouton, ca change le jlabel mais ca ne fait rien qq un pourrait m'aider merci Thread et int par reference [ par gbourgeois0019 ] Bonjour,Prenons comme exemple le code suvant :// Dans un fichier :package MonPackage;public class ClasseA extends java.applet.Applet {       int Posi executer fichier.bat avec java [ par alias100 ] Salut,j'ai realiser un programme qui me permet de lancer un fichier batch et ca marche en local, maintenant j'ai deux machine connecte appartient au m Texte De jButton ou jLabel sur plusieurs lignes ?? [ par Pipo29 ] Bonjour, Comme dis dans le titre, je voudrais savoir s'il est possible de faire tenir le text d'un label ou d'un bouton swing sur plusieurs lignes. M setBackground [ par Ombitious_Developper ] Salut:Normalement, la méthode setBackground quand elle est appliquée sur un JLabel remplit tout une zone rectangulaire avec la couleur en question mai Affichage d'un JLabel [ par Abralou ] Bonjour à tous,ma question n'est pas compliquée mais ca fait un moment que je cherche la réponse.Voici mon code :[code]public class ZoneMenu extends J les Thread [ par didoux95 ] Bonjour a tous,j'ai un pb avec les thread:code:public class A {   public A(){      //la construction de l'interface graphique      Thread MonThread = Thread et Interface [ par LordBob ] Bonsoir a tous,voila en fait je suis en train de plancher sur un problème de conception auquel je n'arrive pas à trouver de solution. Voila en fait je Help... Jeu de battleship en java... [ par joedalton1979 ] Bonjour... Nous sommes vendredi soir 8hpm et je dois remettre ce travail lundi matin.. Voici ce qui devait etre fait... Un jeu de battleship, qui ce j


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,203 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.