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

Langage Java Discussion :

Faire un timer simplement


Sujet :

Langage Java

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut Faire un timer simplement
    J'aimerai avoir un timer qui fasse office de chronomêtre. Je ne comprends pas trop le timer de swing avec les ActionListener.

    N'y a - t - il pas un moyen plus simple?

    merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Points : 675
    Points
    675
    Par défaut
    java.util.Timer ?

  3. #3
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour ,
    ou plutot javax.swing.Timer compte tenu de ce dont tu parles
    Timer(int delay, ActionListener listener)
    Creates a Timer that will notify its listeners every delay milliseconds.
    C'est simple d'utilisation ,tu definie ton ActionListener dans lequel tu is comment va fonctionner ton chronometre(minute,seconde ...) et apres tu definie ton temps ("delay") d'exection de l'action et pour le demarrer il suffit de faire tonTimer.start();
    Je te laisse faire et ensuite propose quelque chose si tu y arrive pas je te montrerai
    Sinon tu peux aussi utiliser java.lang.Thread
    @+

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut
    Voici un code que j'ai récupéré et modifié:

    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
    40
    41
    42
    43
    44
     
     import java.lang.*;
     import java.awt.*;
     import javax.swing.*;
     import javax.swing.border.*;
     import java.awt.event.*; 
     
    public class Main {
     
    	private static int heure=0,minute=0,seconde=0;
     
    	public static void main(String[] args) {
     
    		   /* Le timer */
    		  int delais=1000;
    		  ActionListener tache_timer;
     
    		  /* Action réalisé par le timer */
    		  tache_timer= new ActionListener()
    		  {
    		  public void actionPerformed(ActionEvent e1)
    		  {
    		  seconde++;
    		  if(seconde==60)
    		  {
    		  seconde=0;
    		  minute++;
    		  }
    		  if(minute==60)
    		  {
    		  minute=0;
    		  heure++;
    		  }
    		  System.out.println(heure+":"+minute+":"+seconde);
    		  }
    		  };
     
    		  /* instanciation du timer */
    		  final Timer timer1= new Timer(delais,tache_timer);
    		  timer1.start();
     
    	}
     
    }
    J'essaye d'afficher l'heure courante à chaque seconde.

    Qu'est ce qui cloche?

    merci

  5. #5
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    BOnjour
    Qu'est ce qui cloche?
    Ce qui cloche c'est que dans ton code je ne vois que l'affichage d'un chrono qui demarre à chaque execution.et je ne vois nul part la recuperation de l'heure systeme.
    Si tu veux afficher l'heure courante chaque seconde commences par recupperer l'heure systeme et l'afficher recupperer l'heure systeme Gregorian Calendar
    .Au lieu d'afficher ton chrono tu recupere heure,minute et seconde systeme et tu l'affiches
    Ps:je crois que ton code parle mode graphique et non mode console
    @+

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut
    Oui en effet c'est pompé d'un chrono graphique.
    Mais moi ce que je veux c'est juste avoir un chrono.
    Je ne veux pas forcément l'heure courante, je veux dans un premier temps avoir la valeur du chrono depuis que je l'ai lancé à un instant t.

    Y a - t- il un autre moyen qu'avec le Timer de Swing?

    merci

  7. #7
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Mais tu veux le faire en mode graphique ou en mode console?(sinon ton code fonctionnera bien en mode graphique)

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut
    Voilà je sais ce qui m'embête vraiment:
    Je ne veux pas déclencher le chrono à lors de l'appui d'un bouton.
    Mon évènement est simplement l'ouverture de la fenêtre où est affiché un chrono.

    Comment traduire ceci en évènement?

    merci

  9. #9
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Citation Envoyé par piotrr
    Comment traduire ceci en évènement?
    SI tu ne veux pas que l'evenement soit associé a ton bouton t'a seulement qu'a pas le lui associer,je veux dire tonTimer.start() tu le place dans le code qui lance directement ta fenetre,ce qui fera qu'a l'ouverture de la fenetre le chrono se lancera tout seul
    Ex:Supposons qu'on a une classe qui permet de creer une fenetre avec un JLabel dedans qui affiche le chrono,(Fenetre());
    il suffit de mettre ton code precedent dans ta classe en remplacant le "System.out.println()" par un JLabel et declencher le timer dans le constructeur Fenetre()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
           public class Fenetre extends JFrame{
                ........
                ........
                public Fenetre(){
                   ..........
                   .........
                    .......
                   tonTimer.start();
             ...........
                }
       ..............
            }
    Et dans ton main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
               Fenetre frame=new Fenetre();
                  ......................
    Il faut juste lancer le timer au chargement de la fenetre
    @+

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    Ne sachant pas ce que tu veux faire,
    Je vais tenter expliquer pourquoi ton test n'affiche rien.

    Tout simplement car il n'y a aucun thread "user" de démarré.
    Donc il attend pas la fin de ton timer car le Timer utilise un thread Daemon.

    Pour info la JVM se termine quand il n'y a plus de thread "user".

    Si tu veux que ton test fonctionne il suffit d'ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    timer1.start();
    try{
    Thread.sleep (10000);
    }catch (InterruptedException ignore) {
    }
    Et ensuite ton test fonctionnera pendant 10 sec

  11. #11
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    Citation Envoyé par elmor
    Ne sachant pas ce que tu veux faire,
    Je vais tenter expliquer pourquoi ton test n'affiche rien.

    Tout simplement car il n'y a aucun thread "user" de démarré.
    Donc il attend pas la fin de ton timer car le Timer utilise un thread Daemon.

    Pour info la JVM se termine quand il n'y a plus de thread "user".

    Si tu veux que ton test fonctionne il suffit d'ajouter :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    timer1.start();
    try{
    Thread.sleep (10000);
    }catch (InterruptedException ignore) {
    }
    Et ensuite ton test fonctionnera pendant 10 sec
    Ou plutot utiliser dans ce cas java.util.Timer si tu veux le faire en mode console
    Alors soyons d'accord une fois pour toute tu veux ton truc en mode Console ou graphique?
    @+

  12. #12
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Points : 266
    Points
    266
    Par défaut
    Citation Envoyé par krachik Voir le message
    Bonjour

    Alors soyons d'accord une fois pour toute tu veux ton truc en mode Console ou graphique?
    @+
    Je veux un Timer en mode GRAPHIQUE qui m'affiche un chronomêtre qui indique la durée d'ouverture d'une fenêtre dans celle - ci même.
    Désolé de ne pas être très précis et de ne pas comprendre grand chose aux Threads ...

    Autre chose, si je n'associe pas mon Timer à un bouton ou un quelconque autre widget, alors je n'ai plus d'ActionListener, et si je n'ai plus d'ActionListener alors comment j'instancie mon Timer? ( Timer( int delay, ActionListener ) )

    merci beaucoup

  13. #13
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Autre chose, si je n'associe pas mon Timer à un bouton ou un quelconque autre widget, alors je n'ai plus d'ActionListener, et si je n'ai plus d'ActionListener alors comment j'instancie mon Timer? ( Timer( int delay, ActionListener ) )
    j'ai un exemple plus concret pour toi j'ai une classe qui permet de creer une petite fenetre (t'inquiete pas pour le code c'est un truc vite fait juste pour te montrer ce que je veux dire)
    Ensuite ce que tu as a faire c'est de creer la fenetre dans le main et tu veras le chrono demarrer au lancement de la fenetre
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    package test;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.Timer;
     
    public class Frame extends JFrame{
    	//Declaration de variables
    	private int heure=0,minute=0,seconde=0;
    	private int delais=1000;
     
    	private JLabel label=new JLabel(""+heure+":"+minute+":"+seconde);
    	private ActionListener tache_timer;
    	private Timer timer1;
     
     
    	public Frame(){
    		//Ajout de notre Jlabel au composant fenetre
    		this.getContentPane().add(label);
    		chrono();
    	}
     
    	//Methode pour lancer notre chrono
    	public void chrono(){
    		tache_timer= new ActionListener()  {
    		  public void actionPerformed(ActionEvent e1)  {
    		    seconde++;
    		     if(seconde==60)  {
    		          seconde=0;
    		          minute++;
    		      }
    		  if(minute==60) {
    		      minute=0;
    		      heure++;
    		   }
    		  //Afficher le chrono dans un JLabel
    		  label.setText(heure+":"+minute+":"+seconde);
     
    		 }
         };
         //Action et temps execution de la tache
         timer1=new Timer(delais,tache_timer);
         //Demarrer le chrono
         timer1.start();
    	}
     
    }
    Maintenant
    e veux un Timer en mode GRAPHIQUE qui m'affiche un chronomêtre qui indique la durée d'ouverture d'une fenêtre dans celle - ci même.
    Si je comprend tu veux dire tu essai d'afficher la dureé d'ouverture d'un fenetre dans la fenetre principale dans ce cas t'a juste a recupper l'heure systeme avant l'ouverture et apres l'ouverture,en faisant la difference tu as la durée que tu cherches si j'ai bien compris

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

Discussions similaires

  1. Faire un timer precis sous windows !
    Par Niklaos dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2010, 22h15
  2. Cherche à faire des falsh simplement
    Par debo41 dans le forum Flash
    Réponses: 0
    Dernier message: 23/01/2009, 14h30
  3. La bonne méthode pour faire des timers
    Par Tigrounette dans le forum Général Java
    Réponses: 10
    Dernier message: 19/07/2008, 22h35
  4. faire un timer en php
    Par fmdr dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2006, 17h07
  5. Comment faire un Timer de fonction PORTABLE ?
    Par dieuP1guin dans le forum C
    Réponses: 3
    Dernier message: 04/07/2003, 10h44

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