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

AWT/Swing Java Discussion :

Simulation et Jlabel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Par défaut Simulation et Jlabel
    Bonjour à tous,

    Je suis en train de faire une application et je bloque sur un petit truc :p

    Je vous explique:

    Dans mon code, j'ai une boucle while qui fait une opération tant que je lui dis pas d'arreter. Je veux afficher ce résutlat au fur et à mesure dans un JLabel. Mais le résultat n'est affiché dans mon jlabel qu'a la fin de la boucle.

    En gros mon code fait ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (Not_end)
    {
         n = n+3;
         jLabel2.setText(n);
         Sleep (1000);
    }
    Mon probleme est que le jLabel ne change pas au fur et a mesure, il change qu'à la fin.
    Alors que les system.out.println fonctionnnt comme je le veux.

    Je pense que c'est un comportement normal mais je ne vois pas trop comment le contourner.
    Dois-je ajouter une ligne sous le jLabel.setText ?
    Est-ce qu'avec un thread ca marchera ?

    Merci pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Plus de precisions ici. Tu peux aussi consulter la FAQ AWT/SWING
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre expérimenté Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Par défaut
    Salut

    D'abord, je présume que Sleep(1000) n'a rien avoir avec Thread.sleep().
    Et dans cette méthode Sleep(1000), qu'est-ce qui se passe ?


    Le problème c'est que le code s'exécute dans l'EDT i.e. le thread responsable d'afficher l'interface graphique. Donc, Lorsque ta boucle while s'exécute, le thread n'e peut effectuer un repaint() de l'interface. Ca fonctionne avec System.out.println() cela ne passe par l'EDT.

    Est-ce qu'avec un thread ca marchera ?
    en effet, par exemple:

    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
     
    Thread t = new Thread(){
    		int n = 0;
    		public void run(){		
    		while(go){
    			jLabel2.setText(" "+n++);
     
    			try{			
    			sleep(1000);
    			}catch(Exception e){
    				e.printStackTrace();
    			}
     
    		}
    		}
    		}
    t.start();

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Par défaut
    Merci Jibi pour ta réponse.

    Sleep est bien Thread.sleep, j'ai fais juste un petit exemple vite fait de code et j'ai pas mis tous les détails.

    Je vais faire un thread et je ous tiens au courant.

    Merci pour l'aide ^^

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Par défaut
    Ca ne marche toujours pas.

    Voila le code qui s'éxécute quand je clique sur le bouton:
    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
     
            Thread t = new Thread(){
    		int n = 0;
    		public void run(){		
    		while(time<100){
                            n++;
    			jLabel2.setText(" "+n++);
    			System.out.println("test");
    			try{			
    			sleep(1000);
    			}catch(Exception e){
    				e.printStackTrace();
    			}
                    }
                    }
            };
     
            t.run();
    J'ai également essayé en faisant une nouvelle classe mais ca ne change rien!!

    Mais ce que je comprends pas, c que dans le thread j'ai toujours pas boucle while donc ca ne pourra pas changer jLabel si ?

    EDIT: C'est bon ca marche, fallait juste mettre t.start au lieu de t.run.

    MERCI BAUCOUP

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    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
     
    Thread t = new Thread(){
      int n = 0;
     
      /** {@inheritDoc}
       */
      @Override public void run(){		
        try{			
          while(n < 100){
            n++;
            final String label = String.valueOf(n);
            SwingUtilities.invokeLater(new Runnable() {
     
              /** {@inheritDoc}
              */
              public void run() {
                jLabel2.setText(label);
              }
            });
            System.out.println("test");
            sleep(1000);
          }
        } catch(Exception e){
          e.printStackTrace();
        }
      }
    };
    t.setPriority(Thread.NORM_PRIORITY);
    t.start();
    Un truc comme ca serait plus propre tant au niveau de la maj de l'interface que de la gestion de l'exception. Et puis apparement tu incrementais 2 fois n dans ta boucle.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 53
    Par défaut
    Merci beaucoup ^^

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

Discussions similaires

  1. Probleme Voyageur de Commerce - Recuit Simulé
    Par dinver dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/06/2009, 22h26
  2. [Look and feel] Texte des JLabels en gras
    Par aliasjcdenton dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 26/01/2006, 11h49
  3. simuler l'execution d'un message
    Par gaut dans le forum C
    Réponses: 14
    Dernier message: 24/07/2003, 23h01
  4. Simuler un coup de molette sur un memo...
    Par dynobremo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/02/2003, 11h31
  5. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51

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