Récuperer horloge

cs_Erwan76 Messages postés 29 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 2 avril 2007 - 28 mars 2007 à 09:56
Fifan Messages postés 26 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 10 mai 2007 - 11 avril 2007 à 11:31
Bonjour, j'ai un problème avec la récupération de l'heure.
En faite, le truc c'est que je récupère bien l'horloge mais je ne parviens pas à la réactualiser toutes les minutes.
Voici mon code

    void Heure(){
        GregorianCalendar d = new GregorianCalendar();
  
        int heure = d.get(Calendar.HOUR);
        int min = d.get(Calendar.MINUTE);


                String Sheure=Integer.toString(heure);
                String Smin=Integer.toString(min);
                String heure_complete=Sheure+":"+Smin;
                jTextField2.setText(heure_complete);
    }

Je pensais à mettre une boucle mais le problème,c'est qu'elle me bloque tous le programme.
Merci pour votre aide.

9 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2007 à 10:27
Il te suffit de faire un thread qui attend une minute à chaque tour de boucle :

De tête, cela doit donner un truc du genre :
new Thread() {
    void Heure(){
        GregorianCalendar d = new GregorianCalendar();
  
        int heure = d.get(Calendar.HOUR);
        int min = d.get(Calendar.MINUTE);                 String Sheure=Integer.toString(heure);
                String Smin=Integer.toString(min);
                String heure_complete=Sheure+":"+Smin;
                jTextField2.setText(heure_complete);
    }
    public void run() {
       while (true) {
           heure();
           Thead.sleep(60000);
       }
    }
}
0
cs_Erwan76 Messages postés 29 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 2 avril 2007
28 mars 2007 à 10:42
Voila ce que je fais suivant tes modifications.

Je crée cette méthode:
new Thread(){
    void Heure(){


        GregorianCalendar d = new GregorianCalendar();
 
        int heure = d.get(Calendar.HOUR);
        int min = d.get(Calendar.MINUTE);
        String Sheure=Integer.toString(heure);
        String Smin=Integer.toString(min);
        String heure_complete=Sheure+":"+Smin;
        jTextField2.setText(heure_complete);
    }


et ensuite je rajoute la dernière ligne
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //  Rendre visible la Frame Affichage
                new Affichage().setVisible(true);
                while (true){
                    {
                        heure();
                        Thread.sleep(60000);
                    }
            }
        });
    }

C'est bien cela ou je doi laisser tout ensemble.
Sinon, j'utilise Netbeans et il me souligne en rouge la ligne new Thread.
Merci beaucoup DARKSIDIOUS
0
cs_Erwan76 Messages postés 29 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 2 avril 2007
28 mars 2007 à 10:50
Alor as-tu une idée
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2007 à 11:02
hum non, dans ton code, ca ne peut pas marcher : tu créer bien un thread (ton new Runnable()), donc du coup tu n'as plus besoin de la nouvelle instance d'un thread, du coup, ca donne :

    void Heure(){        
        GregorianCalendar d = new GregorianCalendar();
 
        int heure = d.get(Calendar.HOUR);
        int min = d.get(Calendar.MINUTE);
        String Sheure=Integer.toString(heure);
        String Smin=Integer.toString(min);
        String heure_complete=Sheure+":"+Smin;
        jTextField2.setText(heure_complete);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //  Rendre visible la Frame Affichage
                new Affichage().setVisible(true);
                while (true){
                    {
                        heure();
                        Thread.sleep(60000);
                    }
            }
        });
    }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Erwan76 Messages postés 29 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 2 avril 2007
28 mars 2007 à 11:56
Je te remercie.
Ca va biento fonctionner. Encore un léger problème.
Losque tu fais ta boucle et ensuite heure(), il me met non-static methode heure cannot be referenced from a static context.
Merci de m'aider autant!!!
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
28 mars 2007 à 11:59
Arf, normal : une méthode statique doit référence uniquement des métodes statiques pour fonctionner, ou alors passer par une instance (normal !)

Je présume que ta classe s'appelle Affichage, ce qui donne :

public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //  Rendre visible la Frame Affichage
                Affichage frame = new Affichage();
                frame.setVisiblre(true);
                while (true){
                    {
                        frame.heure();
                        Thread.sleep(60000);
                    }
            }
        });
    }
0
cs_Erwan76 Messages postés 29 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 2 avril 2007
28 mars 2007 à 12:27
Je suis vraimant désolé mais çà ne fonctionne pas encore tout à fait
Voici le code:

 public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                //  Rendre visible la Frame Affichage
                Affichage frame = new Affichage();
                frame.setVisible(true);
               
                //new Affichage().setVisible(true);
               
                while (true){
                    frame.Heure();
                    try {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException ex) {
                        ex.printStackTrace();
                    }
               }
            }
        });
    }

Le problème, c'est quand il y a un changement de minute (horologe system), ca ne se propage pas sur l'applicaion java.
As-tu une autre idée.
Je te remercie.
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
29 mars 2007 à 16:21
GRRRR les nom de methode ne doivent pas commencer par une majuscule ....
pense à faire un rafraichissement de l affichage si tu change les valeurs ... un petit repaint() ca doit pas faire de mal ;o)..

[purple]GodConan/purple[:o)]
0
Fifan Messages postés 26 Date d'inscription samedi 4 janvier 2003 Statut Membre Dernière intervention 10 mai 2007
11 avril 2007 à 11:31
Salut,
A la place de ton while qui bloque l'application, tu peux utiliser un Timer (c'est fait pour ça):

new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                frame.heure();
                frame.repaint();
            }
        }).start();
De plus, pour écrire l'heure, il existe des formatter pour ça qui utilise la locale:
Date date = Calendar.getInstance().getTime();
        DateFormat dateFormatter = DateFormat.getTimeInstance();
        jTextField2.setText(dateFormatter.format(date));

Voila
0
Rejoignez-nous