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

EDT/SwingWorker Java Discussion :

Temps d'attente interface


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut Temps d'attente interface
    Bonjour, dans le cadre d'un projet java je veux realiser une interface java et j'aimerais que lorsque j'appuie sur un bouton le message "j'ai faim" s affiche pendant 3 secondes et apres le message devient "je n'est plus faim". J'ai utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    try{
    Thread.sleep(3000);
    }catch(InterruptedException e){}
    Le probleme est qu à l affichage il y a le message "je n'est plus faim" qui s affiche apres 3 secondes mais avant je n'est rien qui s'affiche. Je ne vois pas quoi changer

  2. #2
    Membre Expert Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Par défaut
    qui s affiche après 3 secondes
    Donc le problème ne viens pas de la pause mais de ce qu'il y a avant....

    A tous hasard, tu as bien fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    monTexte.setText("J'ai faim");
    try{Thread.sleep(3000);}catch(InterruptedException e){}
    monTexte.setText("Je n'ai plus faim");

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut
    voila ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void actionPerformed(ActionEvent evt) {
            Object source = evt.getSource();
                if(source == boutonMiseEnMarche) {
                     monTexte.setText("J'ai faim");
                     try{
                        Thread.sleep(3000);
                     }
                     catch(InterruptedException e){}
                     monTexte.setText("Je n'ai plus faim");
                }
    voila et au resultat j'ai rien pendant 3 secondes et apres j'ai "Je n'ai plus faim" au lieu d'avoir "J'ai faim" pendant 3 secondes et apres "Je n'ai plus faim"

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    En faisant un sleep dans le actionPerformed tu bloques l'EDT (le thread en charge de la gestion de l'interface utilisateur, événements clavier, souris, mise à jour des zones de l'écran à redessiner) et tu ne lui rends pas la main : le composant monTexte n'est pas réactualisé à l'écran. A l'issue de l'attente, le texte du composant monTexte est mis à jour, tu rends la main à l'EDT qui cette fois peut rafraîchir la zone de l'écran impactée. Il ne faut pas pbloquer l'exécution du thread EDT. Dans ton cas tu peux faire 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
    14
    15
    16
     
    Timer timer = new Timer(3000,
                            new ActionListener() {
                               public void actionPerformed(ActionEvent evt) {
                                  monTexte.setText("Je n'ai plus faim");
                               }
                            });
    timer.setRepeats(false);
     
    public void actionPerformed(ActionEvent evt) {
            Object source = evt.getSource();
            if(source == boutonMiseEnMarche) {
               monTexte.setText("J'ai faim");
               timer.start();
            }
    }

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Par défaut
    Excuse moi mais ou je dois mettre " timer.setRepeats(false); "?

    car j'ai fait ce que tu m a dit mais j'ai : <identifier> expected pour cette instruction.
    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
    public class InterfaceTamaguchi extends JFrame implements ActionListener {
     
        public InterfaceTamaguchi(String filePath) { // constructeur
            super("Tamaguchi"); // Nom de la fenêtre
            this.filePath = filePath;
            initialize();
        } // fin constructeur
     
        private void initialize() {
            // fabrication de l'interface graphique
        } // fin initialize()
     
        Timer timer = new Timer(3000, new ActionListener() {
                                        public void actionPerformed(ActionEvent evt) {
                                            labelEtat.setText("Je n'ai plus faim");
                                        }
     
                                });
        timer.setRepeats(false);
     
        public void actionPerformed(ActionEvent evt) {
            Object source = evt.getSource();
            if(source == boutonMiseEnMarche) {
               monTexte.setText("J'ai faim");
               timer.start();
            }
        }
     
        public static void main(String[] args) {
            InterfaceTamaguchi Bill = new InterfaceTamaguchi(imagePath);
            Bill.pack();
            Bill.setVisible(true); // Affiche l'interface à l'écran
        } // fin main
     
    } // fin InterfaceTamaguchi

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par cedlapinte Voir le message
    Excuse moi mais ou je dois mettre " timer.setRepeats(false); "
    Où tu veux
    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
    public class InterfaceTamaguchi extends JFrame implements ActionListener {
    
        // le timer permettant de ...
        private Timer timer;
    
        private void initialize() {
            // fabrication de l'interface graphique
    
            // Ici, ça semble bon non ?
            // Initialisation du timer :
            timer = new Timer(3000,
                              new ActionListener() {
                                  public void actionPerformed(ActionEvent evt) {
                                      labelEtat.setText("Je n'ai plus faim");
                                  }
                              });
            timer.setRepeats(false);
    
        } // fin initialize()
    }

Discussions similaires

  1. algorithme qui détecte et compte le nombre de visages et leur temps d'attention
    Par aptchagi dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/06/2007, 15h46
  2. [MSDNAA] Temps d'attente
    Par erfindel dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 02/02/2007, 12h34
  3. Splashscreen / Temps d'attente ?
    Par Bibipulse dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 10/05/2006, 13h11
  4. [Info-bulles]Comment modifier le temps d'attente?
    Par minus dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 22/03/2006, 14h39
  5. [VB]temps d'attente entre 2 instructions
    Par XtoX dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/09/2005, 10h38

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