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 :

Utilisation de "javax.swing.Timer"


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut Utilisation de "javax.swing.Timer"
    Bonjour à tous,

    en ce samedi soir, je me replonge dans un TP de java...
    Je dois écrire un programme me permettant d'afficher la date courante sur la sortie standard, toutes les 1 seconde, afin de me familiariser avec Timer...
    J'ai donc lu la javadoc, et ai pondu 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
    17
    18
    19
    20
    21
    22
    import javax.swing.*;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class test {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		  int delay = 1000; //milliseconds
    		  ActionListener taskPerformer = new ActionListener() {
    		      public void actionPerformed(ActionEvent evt) {
    		          System.out.println(java.util.Calendar.getInstance().getTime().toString());		      
    		      }
    		  };
    		  new Timer(delay, taskPerformer).start();
     
    	}
     
    }
    ... Alors, ça fait un moment que j'ai pas fait de java, mais si je me souviens bien...
    J'ai juste à faire : "javac test.java"... J'ai aucune erreur à la compilation, mais quand je lance mon fichier test (java test)... Rien ne s'affiche...

    Ca fait 1h que j'essaie de comprendre...

    Toute aide sera la bienvenue!

    Merci d'avance.

  2. #2
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 106
    Points
    106
    Par défaut
    Bonsoir,

    pour moi le code compile. Tu devrais utiliser Eclipse ca iras plus vite.

    Sinon ton code est correcte mais comme tu sors immédiatement de ta fonction main le programme s’arrête.

    Tu devrais faire un JFrame ou tu mettrais ton code concernant le Timer
    Sébastien

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    Merci de votre réponse déjà!

    Moi aussi ça compile, mais il m'est demandé d'obtenir l'affichage sur la sortie standard... C'est pour ça que j'ai pas utilisé de fenêtre...
    Je ne comprends pas pourquoi, quand je lance mon appli dans la console, je n'obtiens pas une suite de date...
    Mon 'println' devrait pourtant produire ça...

  4. #4
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 106
    Points
    106
    Par défaut
    car vous créez un objet ActionListener qui est une classe gérant les clicks sur les boutons en swing. Le code à l intérieur n'est jamais appeler.

    Mettez directement votre system.out... dans la fonction et vous aurez quelque chose sur la sortie standard
    Sébastien

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    Je suis désolé, j'avoue ne pas bien comprendre ou mettre mon "println"...
    J'ai lu cette javadoc : http://docs.oracle.com/javase/6/docs/api/

    Et Timer prend en paramêtre un ActionListener... Je pensais donc qu'à chaque cycle, Timer déclenchait une action (tout comme un click sur un bouton) "entendu" par l'ActionListener, qui déclenchait donc le "actionPerformed"...
    Qu'ai je mal compris?...

  6. #6
    Membre régulier
    Inscrit en
    Février 2008
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 88
    Points : 106
    Points
    106
    Par défaut
    Car tu sorts tout de suite de ton programme. Si tu dit pas à ton programme de ne pas sortir avec une boucle infini, une fenêtre ou un thread il se termine...

    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
    package test;
     
    import java.awt.HeadlessException;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.*;
     
    public class Play extends JFrame
    {
        private static final long serialVersionUID = 4728920536811198811L;
     
     
        protected Timer jolieTimer;
     
        public Play() throws HeadlessException
        {
    	super();
    	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	setTitle(":)");
     
    	int delay = 1000; //milliseconds
    	  ActionListener taskPerformer = new ActionListener() {
    	      public void actionPerformed(ActionEvent evt) {
    	          System.out.println(java.util.Calendar.getInstance().getTime().toString());		      
    	      }
    	  };
    	  setVisible(true);
    	  jolieTimer = new Timer(delay, taskPerformer);
    	  jolieTimer.start();
     
        }
     
     
     
     
        /**
         * @param args
         */
        public static void main(String[] args)
        {	  
    	new Play();
     
        }
     
    }
    Sébastien

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    En effet, avec une boucle infinie ça marche!!


    Merci beaucoup!!

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    Re-bonjour! Nouvelle journée, nouveaux problèmes...

    Je dois cette fois lister les fichiers de type "*.class" contenu dans un dossier, à un intervalle régulier défini dans mon "timer"... Je dois pour cela utiliser la méthode "String[] list(FilenameFilter)" de la classe File...

    Voici donc le code qui me semble naturel...
    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
    import javax.swing.*;
    import java.io.*;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class test {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		  File extensions = new File("/home/alba/Travail/COO/fichiers-plugins/extensions");
    		  int delay = 1000; //milliseconds
    		  String[] files;
    		  FilenameFilter filter = new FilenameFilter(){
    			  public boolean accept(File dir, String name){
    				  return name.endsWith(".class");
    			  }
    		  };
    		  ActionListener taskPerformer = new ActionListener() {
    		      public void actionPerformed(ActionEvent evt) {
    		          files = extensions.list(filter);
    		      }
    		  };
    		  while(true){
    		  new Timer(delay, taskPerformer).start();
    		  }
     
    	}
     
    }
    Seulement, celui ci ne compile pas... Eclipse me demande de passer mes variables "extensions", "files" et "filter" en final... Mais je ne me l'explique pas.

    J'espère qu'une âme charitable saura m'aider!
    Merci en tout cas!

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    ... Je suis pommé pommé...

    Toujours personne pour m'expliquer?

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 553
    Points : 21 609
    Points
    21 609
    Par défaut
    Citation Envoyé par Alba.1337 Voir le message
    Seulement, celui ci ne compile pas... Eclipse me demande de passer mes variables "extensions", "files" et "filter" en final... Mais je ne me l'explique pas.
    Parce que ces variables sont déclarées à l'intérieur d'une méthode (on dit que ce sont des variables locales.)

    Or tu t'en sers à l'intérieur de classes anonymes, qui ne peuvent pas surveiller les changements de valeurs de variables locales.
    Par conséquent, si ces variables ne peuvent pas changer de valeur, ça va, mais si elles peuvent changer de valeur, alors ces classes ne sont pas capables de voir les changements, et donc elles ne peuvent connaître leur valeur à tout moment, et donc le leur demander ne compile pas.

    Conclusion : pour que ça compile, il faut empêcher ces variables de pouvoir changer de valeur... Avec le mot-clé final.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2010
    Messages : 119
    Points : 39
    Points
    39
    Par défaut
    Ah ok, merci beaucoup!

    Je n'avais jamais vu le concept de classe anonyme, je m'étais contenté de suivre le modèle donné dans la javadoc de "Timer"...

    Merci encore!

Discussions similaires

  1. Problème d'utilisation du package javax.swing.JFrame;
    Par patricia_zer dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 12/05/2015, 09h47
  2. Délai du premier event : javax.swing.Timer
    Par Birmania dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 28/06/2012, 22h06
  3. Chronomètre simple utilisant un javax.swing.Timer
    Par Johann.Heymes dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/03/2011, 19h09
  4. [javax.swing.Timer] Arrêter mon Timer
    Par GLDavid dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 17/01/2006, 15h26
  5. Utilisation javax.swing.ButtonGroup dans Visual Editor
    Par inch dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2005, 16h25

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