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 :

Timer s'executant 2 fois simultanément


Sujet :

EDT/SwingWorker Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut Timer s'executant 2 fois simultanément
    Bonjour,

    J'ai ce code très simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ActionListener taskPerformer = new ActionListener() {
     
    			public void actionPerformed(ActionEvent evt) {
    				JOptionPane.showMessageDialog(null, "alerte");
    		      }
    		  };
    		  Timer temp = new Timer(2000, taskPerformer);
    		  temp.start();
    Et ce que je ne comprend pas c'est pourquoi le timer ne s'execute pas correctement. En effet, quand je lance cela j'ai 2 messages d'erreur qui s'affiche l'un derrière l'autre puis 2 secondes plus tard 2 autres s'affichant ensemble et ainsi de suite.

    Or moi j'ai besoin que l'action s'execute une fois, pas en double

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    salut.
    c'est quoi l'erreur que tu obtiens ?
    et si tu veux connaitre la trace de l'exécution, utilise un System.out.println(....) plutôt qu'un JOptionPane

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Il n'y a aucune erreur, le problème n'est pas que le programme bug mais qu'il ne s'execute pas correctement. Je n'ai mis que le JOptionPane pour montrer que cela ne fonctionnait pas et que l'action du timer s'executait 2 fois toutes les 2 secondes au lieu d'une toute les 2 secondes

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Alors, l'erreur avec ton code, ce n'est pas que le message s'affiche 2 fois au lieu de 1, mais plutôt qu'il ne s'affiche QUE 2 fois, et non pas à l'infini !

    Une fois que tu fais start sur ton Timer, il va exécuter l'actionPerformed() en boucle jusqu'à ce que tu fasses un stop.

    Dans ton cas, je suppose qu'il s'arrête à 2 car ton programme se termine.

    Ajoute une JFrame que tu laisses ouverte afin que ton programme ne se termine pas, et tu auras ton message toutes les 2 secondes non stop.

    Si tu veux que le traitement ne se fasse qu'une fois, met un stop à la fin de ton actionPerformed sur ton timer, ou alors utilise les Thread (car je pense que c'est plutôt cela que tu essaies de faire).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 676
    Par défaut
    Décidement, j'ai fait un Thread mais j'ai toujours le même problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Clignote extends Thread
    {
    	public void run()
    	{
    		JOptionPane.showMessageDialog(null, "alerte");
     
      		  try {
      	        // pause
      	        Thread.sleep(2000);
      	        Fenêtre.clignoter();
      	      }
      	      catch (InterruptedException ex) {}
    	}
    }
    Dans Fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	static public void clignoter()
    	{
    		Thread clignement=new Clignote();
    		clignement.start();
    	}

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Alors c'est tout à fait normal !
    Tu lances ton thread qui se relance lui même puis qui se relance, qui se relance, ... ZZzZz...

    J'avais compris que tu voulais faire exécuter une tâches 1 fois, mais en dehors du Thread actif. Par contre, je vois que tu as une méthode clignoter(), du coup j'ai un doute.

    Tu cherches à faire quoi ? Car je me demande si j'avais bien compris la première fois.

Discussions similaires

  1. [C++]Timer pour exécution séparée
    Par Invité4 dans le forum SDL
    Réponses: 33
    Dernier message: 26/02/2008, 18h01
  2. [DOS] Execution de fichier simultané avec nom aléatoire
    Par noabeuh dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 04/03/2007, 14h47
  3. Réponses: 1
    Dernier message: 03/12/2006, 16h13
  4. [VBA-W] Executer plusieurs fois la même procédure
    Par delamarque dans le forum VBA Word
    Réponses: 3
    Dernier message: 05/12/2005, 13h39
  5. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56

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