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 :

Chrono pas 'précis'..!


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 20
    Points
    20
    Par défaut Chrono pas 'précis'..!
    Bonjour à tous,

    J'ai crée une applet dans laquelle j'ai mis un chronomètre dans un label. Le seul problème est que ce chronomètre prend 5 secondes de retard sur 20 secondes de temps...!
    Voilà comment je l'ai crée (lol avec l'aide de developpez.com):


    Cela se trouve dans un thread où le temps vaut t=+0.01*nbmilli (où nbmilli vaut 40):

    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
     
    if(chrono==true){
                       crtmillis=System.currentTimeMillis();
                       System.out.println(crtmillis-lastmillis+ "           "  +dixiemeseconde);
     
                       if(crtmillis-lastmillis>100){
                           dixiemeseconde++;
                           lastmillis=crtmillis;
                           StringBuffer sb =new StringBuffer();
                           lbchrono.setText(sb.append(dixiemeseconde / 360000)
                                   .append(":")
                                   .append((dixiemeseconde / 60000) % 6).append((dixiemeseconde / 6000) % 10)
                                   .append(":")
                                   .append((dixiemeseconde/ 100) % 6).append((dixiemeseconde / 10) % 10)
                                   .append(":")
                                   .append(dixiemeseconde % 10)
                                   .toString());
                           sb.setLength(0);
     
                       }
                   }
    et bien sûr la valeure initiale de lastmillis est prise dans 'init'

    Une idée ?!

    Merci
    Cordialement

    Pat-trix

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Elle sort d'où ta variable dixiemeseconde ?
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre confirmé Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Points : 510
    Points
    510
    Par défaut
    Ton algo me semble tout à fait mauvais, si je puis me permettre

    C'est la séquence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(crtmillis-lastmillis>100){
       dixiemeseconde++;
       lastmillis=crtmillis;
    Imagine que la différence temps courant - temps précedent soit égale à 150 ; ton algo te fait perdre 50 dans le comptage !

    Maintenant je me trompe peut être c'est juste une supposition une impression j'ai pas vérifié

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Nous sommes 3 sur cette impression je pense
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 20
    Points
    20
    Par défaut
    C'est juste..., je suis bien d'accord!

    Comment je pourrais changer ce code simplement (dans ce thread qui va à =+ 0.01 nbmilli [nbmilli=40]) pour que mon chono soit vraiment précis...?

    Merci

    Cordialement

    Pat-trix
    (NB: oubliez pas que je suis encore un débutant )

  6. #6
    Membre confirmé Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Points : 474
    Points
    474
    Par défaut
    Essaie avec la classe javax.swing.Timer (Voir la FAQ ou la javadoc sun)
    Voilà un exemple d'utilisation dans ton cas :

    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
    52
    53
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.Timer;
     
    public class Main {
     
    	private static int dixiemeSeconde ;
     
    	public static void main(String[] args) 
    	{
    		chrono() ;
    	}
     
    	public static void chrono()
    	{
    		MonAction a = new MonAction() ;
    		Timer t ;
    		t = new Timer(100, a ) ;
     
    		dixiemeSeconde = 0 ;
     
    		t.start() ;
    		try {
    			Thread.sleep(500) ;
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
    	}
     
    	private static class MonAction implements ActionListener
    	{
    		public MonAction() {}
     
    		public void actionPerformed(ActionEvent e) {
    			dixiemeSeconde++ ;
    			System.out.println(
    					dixiemeSeconde/360000+
    					":"+
    					(dixiemeSeconde/60000)%6+
    					(dixiemeSeconde/6000)%10+
    					":"+
    					(dixiemeSeconde/100)%6+
    					(dixiemeSeconde/10)%10+
    					":"+
    					dixiemeSeconde%10
    			);
     
    		}
     
    	}
    }

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse!

    Enfait j'ai juste quelque chose que j'arrive pas à mettre dans mon code: c'est le MonAction()... t'arriverais à faire un exemple je vois pas trop ce que tu entends par là...

    Merci

    Cordialement

    Pat-trix

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 20
    Points
    20
    Par défaut
    Enfait j'ai trouver le problème, tout marche!
    Merci beaucoup!

    Cordialement

    Pat-trix

  9. #9
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Attention, le code de schniouf peut ne pas être très précis. En effet si le systeme a une certaine charge de travail, les intervales seront en réalité plus long que le délai spécifier.
    Il faut utiliser la méthode System.currentTimeMillis() pour calculer le vrai temps écoulé. J'avais fait une classe basée sur le javax.swing.Timer qui renvoie le vrai temps écoulé. Je la retrouve et je la poste .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  10. #10
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Voila, j'ai posté le code sur Page Sources Java libres - participez ici.
    Accès direct ici.

    Enjoy .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Points : 20
    Points
    20
    Par défaut
    Hey!

    Merci beaucoup pour ton exemple, c'est toujours utile

    Cordialement

    Pat-trix

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

Discussions similaires

  1. Le Timer sous VB n’est pas précis
    Par tizana dans le forum VB.NET
    Réponses: 1
    Dernier message: 13/09/2012, 19h36
  2. Le TTimer n'est pas précis a la seconde???
    Par Baxter67 dans le forum C++Builder
    Réponses: 11
    Dernier message: 26/09/2008, 13h26
  3. Quel chrono est le plus précis ?
    Par pat-trix dans le forum Langage
    Réponses: 20
    Dernier message: 18/11/2006, 17h18
  4. afficher un fichier bien précis quand la cible d'un lien n'existe pas
    Par Drozo dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/08/2006, 11h28
  5. [Timer]Timer pas très précis
    Par harold63 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 25/07/2005, 08h36

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