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 :

Petit compte-à-rebours avec un JLabel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 35
    Par défaut Petit compte-à-rebours avec un JLabel
    Bonjour les amis,
    je veux faire un petit compte à rebours de 10 à 0 avec un jLabel. Avant j'utilisais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                try 
                {
                    Thread.sleep(500);
                } catch (InterruptedException e) {}
    et j'affichais le résultat dans un println dans la console.

    Maintenant je veux le faire dans une fenêtre. Il y a plein de tuto utilisant Timer mais je veux le faire avec simple un For comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for (int x = 10; x >= 0; x--) 
            {
     
                jLabelChiffre.setText(String.valueOf(x));
     
     
                try 
                {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {}
     
            }
    Je veux bien utiliser le For pour ce programme. Pourquoi ça bloque ?

    Merci !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par gznnn75 Voir le message
    Maintenant je veux le faire dans une fenêtre. Il y a plein de tuto utilisant Timer mais je veux le faire avec simple un For comme ceci :
    Si les tutos utilisent un Timer, c'est pour une bonne raison.

    1. Lorsqu'on utilise Swing, on doit toujours faire les interactions (Modifier le texte d'un JLabel) avec les composants dans le thread de Swing, appelé Event Dispatch Thread (ou EDT).
    2. Comme tout thread, l'EDT ne peut exécuter qu'une instruction à la fois. Le principe de son fonctionnement est qu'il y a une boucle qui régulièrement exécute du code, qui provient soit d'événements (clic sur un bouton par exemple), soit de code directement invoqué sur ce thread, et à la fin de chaque itération, on voit le résultat. Ce code est exécuté en séquence comme tout code jusqu'à sa fin : si tu fais une boucle dans ce code, elle s'exécutera jusqu'au bout, et l'affichage ne sera à jour que lorsque la boucle est terminée. Autant dire que la boucle ne sert à rien : on peut afficher directement la fin du compte à rebours.
    3. Il n'est pas impossible de faire un for comme tu l'as fait, mais
      1. tu risques certains conflits et donc des défauts d'affichage (parce que tu seras obligé d'exécuter ta boucle dans un thread autre que l'EDT).
      2. Swing effectue une régulation de la mise à jour de l'affichage (qui évite de faire trop souvent la mise à jour de l'affichage) qui va faire que la plupart du temps tu ne verras pas d'étapes intermédiaires, ou très peu. Et ce même si tu forçais la mise à jour de l'affichage par repaint (ce qui n'est pas nécessaire, parce que le setText() de JLabel le fait déjà).
    4. Avec l'idée du for, il y aurait bien une solution avec un SwingWorker, mais c'est faire beaucoup plus compliqué qu'avec un Timer pour juste le plaisir de faire compliqué
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2017
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2017
    Messages : 35
    Par défaut Wow, merci
    Wow, sans te connaître Joel, je t'adore. Merci pour la réponse. Je vais me résoudre à utiliser un Timer.

    Merci encore.

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

Discussions similaires

  1. [débutant] compte à rebours avec changement d'image
    Par ravid87 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2011, 11h41
  2. Une histoire de compte à rebours (avec formulaire)
    Par Olivier14 dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 04/03/2009, 13h43
  3. Compte à rebours avec affichage
    Par shazad dans le forum Débuter
    Réponses: 18
    Dernier message: 11/12/2008, 15h38
  4. Petit compte à rebours avec PHP.
    Par Trinout dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/09/2007, 16h06
  5. Compte à rebours avec Timer
    Par womannosky dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 13/06/2007, 18h33

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