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 :

Timer et variable


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut Timer et variable
    Bonjour,

    Je suis en train de mettre en place un Timer pour créer une alerte à chaque fois que ma variable ne change pas de valeur pendant 10 secondes.

    J'aimerais savoir comment vérifier toutes les 10 secondes si ma variable a changé de valeur ou pas? Faut il que je fasse un second Timer pour ça?

    Merci de votre aide.

  2. #2
    Membre régulier

    Homme Profil pro
    Lycéen-Développeur Java autodidacte
    Inscrit en
    Février 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Lycéen-Développeur Java autodidacte
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 33
    Points : 117
    Points
    117
    Par défaut
    Bonjour,

    Hum, je dirais plutôt cloner ta variable et vérifier après 10s si la variable et son clone ont toujours la même valeur

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par peemoney Voir le message
    Bonjour,

    Je suis en train de mettre en place un Timer pour créer une alerte à chaque fois que ma variable ne change pas de valeur pendant 10 secondes.

    J'aimerais savoir comment vérifier toutes les 10 secondes si ma variable a changé de valeur ou pas? Faut il que je fasse un second Timer pour ça?

    Merci de votre aide.
    Attention a ne pas faire de lecture sans synchroniser avec les écritures de ta variable!

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Merci pour vos réponses

    Même si je clone ma variable je me retrouve avec le même problème. Mon but c'est vérifier chaque 10 secondes si ma variable a changé de valeur.
    Si j'ai bien compris le fait de cloner ma variable ne fait que le dupliquer...

    Le problème c'est que si je fais un second timer pour ca, il ne sera pas synchro avec mon 1er timer qui consiste à lever l'alerte..
    Merci

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    L'interet d'avoir l'ancienne valeur c'est qu'a chaque exécution ton timer peut lire la nouvelle et la comparer avec l'ancienne et tu sauras.

    Mais peut être qu'on a pas pigé ce que tu voulais dire...
    Tu cherches à savoir comment informer après ton programme de ce changement?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    Il faut que tu fasse cela dans un Thread.

    Ca ressemblerait à ça :

    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
    public ClassPrincipale{
        // Il est préférable de déclarer la variable en volatile pour que les thread puissent y accéder correctement avec sa bonne valeur
        public volatile int maVariable;
     
        public void testVariable(){
               // Initialisation du thread de vérification
               ThreadVerifVariable verif = new ThreadVerifVariable();
               Thread th = new Thread(verif);
               // Démarrage du thread (non bloquant, la méthode RUN est appelée)
               th.start();
       }
    }
     
    public ThreadVerifVariable() implements Runnable {
       private ClassPrincipale c;
     
       public ThreadVerifVariable(ClassPrincipale  c){
          this.c = c;
       }
     
      public void run(){
          int oldval = c.maVariable;
          while(true){
               Thread.sleep(10000);//Attente 10 sec
               int curval = c.maVariable;
               if(curval != oldval){
                    System.out.println("la variable a changé !");
                    // Traitements
               }
               oldval = curval;
          }
      }
    }
    Note : pas besoin de synchroniser ! Comme la variable est volatile tu es sur d'y accéder avec sa valeur courante.

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Merci pour vos réponses.
    En fait au lieu de calculer les deux temps et faire la différence j'ai opté pour une autre solution qui est d'utiliser le Timer Swing (new Timer(10000, taskPerformer))
    avec un setRepeats à false. et ca marche.
    Le souci c'est que le Timer de java ne peut pas se mettre en pause et être stoppé même avec ses fonctions timer.stop().
    Avez vous déjà utilisé le Timer de Java swing??
    Merci

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Tu peux très bien faire un stop puis un start sur le timer pour le "mettre en pause".
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Justement Wax78 quand je fais stop() il fait rien du tout. Voici mon code:

    ActionListener taskPerformer = new ActionListener(){
    public void actionPerformed(ActionEvent e){
    try {

    publishZero(new DataMessage("CNAT:1;Zero:62"));

    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    };
    timer = new Timer(Integer.parseInt(timeZero), taskPerformer);

    if(dataMessage.getTopic().contains("BTP")){
    if(dataMessage.toDebugString().toString().contains("CNAT") && dataMessage.getValue("CNAT").charAt(0)=='1'){

    if(dataMessage.getValue("ME_ID")!=null){

    if(timer.isRunning()){
    timer.stop();
    timer.start();
    } else {
    timer.start();
    timer.setRepeats(false);
    }

    } else {
    timer.setDelay(20000);
    }
    }
    }

  10. #10
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Quand tu fais stop le timer s'arrête. C'est donc logique "qu'il ne fasse plus rien dutout"...

    Devinette : Faire Stop puis start de suite n'as aucun sens entre nous...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Alors ceci est pour redemarrer le timer c'est pour ca que je fais timer.stop() puis timer.start(). Tu peux aussi faire timer.restart() comme expliqué dans ce tuto:
    http://albertattard.blogspot.co.uk/2...ing-timer.html

    Le problème c'est que quand mon timer est démarré il ne rentre même pas dans mon isRunning(), il l'ignore..

  12. #12
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par peemoney Voir le message
    Alors ceci est pour redemarrer le timer c'est pour ca que je fais timer.stop() puis timer.start(). Tu peux aussi faire timer.restart() comme expliqué dans ce tuto:
    http://albertattard.blogspot.co.uk/2...ing-timer.html

    Le problème c'est que quand mon timer est démarré il ne rentre même pas dans mon isRunning(), il l'ignore..
    Tu m'as l'air de ne pas avoir bien pigé le concept d'un timer...
    Celui-ci exécute le code du taskPerformer et c'est tout.
    Dans ton code tu démarres après avoir fait le isRunning, c'est donc normal que celui-ci renvoi faux avant.

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 32
    Points : 14
    Points
    14
    Par défaut
    Merci deathness, j'avais pa vu cela. Du coup je lance mon timer à partir de mon main et du coup ca marche très bien et répond à mes attentes.
    Merci à tous

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

Discussions similaires

  1. [Débutant] timer avec variable globale et locale
    Par stracoma dans le forum VB.NET
    Réponses: 4
    Dernier message: 24/05/2015, 20h23
  2. Timer Digital à taille variable
    Par Pafrag dans le forum C
    Réponses: 8
    Dernier message: 28/04/2015, 13h58
  3. Timer javascript lancement variable Php
    Par Nicolas94 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/08/2009, 11h26
  4. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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