Je souhaite mettre en œuvre une horloge au sein de mon programme à Diusplay de la date et de l'heure pendant l'exécution du programme. J'ai examiné le Le problème est que je peux obtenir l'heure actuelle lorsque le programme se charge, mais il n'est jamais mis à jour. Toute suggestion sur quelque chose à regarder serait grandement appréciée! P> getcurrenttime () code> méthode et
minuterie code> s mais aucun d'entre eux ne semble faire ce que je voudrais. p>
7 Réponses :
Ce que vous devez faire est d'utiliser La minuterie code>
classe.
Il suffit de faire courir chaque seconde et de mettre à jour l'horloge avec l'heure actuelle. P>
Timer t = new Timer(100, updateClockAction);
J'ai fait un test et la mise à jour a toujours été environ une demi-seconde derrière à l'aide de Javax.swing.Timer, mais je ne sais pas pourquoi
Cela ressemble à ce que vous pourriez avoir un problème conceptuel. Lorsque vous créez un nouvel objet Java.Util.Date, il sera initialisé à l'heure actuelle. Si vous souhaitez implémenter une horloge, vous pouvez créer un composant d'interface graphique qui crée constamment un nouvel objet de date et met à jour l'affichage avec la dernière valeur.
Une question que vous pourriez avoir est de savoir comment faire quelque chose à plusieurs reprises sur un calendrier? Vous pouvez avoir une boucle infinie qui crée un nouvel objet de date puis appelle Thread.sleep (1000) afin qu'il obtient la dernière fois chaque seconde. Un moyen plus élégant de le faire est d'utiliser un TimerSk. En règle générale, vous faites quelque chose comme: p> puis, pour l'appeler, vous feriez quelque chose comme: p>
Ce code fonctionne probablement bien, mais puisque vous utilisez Java.Util.Timer, vous devez vous assurer d'utiliser oscillabilité.invokelater () code> pour mettre à jour l'interface graphique.
Absolument. J'étais délibérément vague à propos de la "faire quelque chose", je ne voulais pas introduire trop de choses simultanément.
Vous devez mettre à jour le texte dans un fil séparé chaque seconde.
Idéalement, vous devez mettre à jour le composant Swing uniquement dans l'EDT (filetage du répartiteur de l'événement) mais, après l'avoir essayé sur ma machine, en utilisant Timer.ScheduleatFixRate m'a donné de meilleurs résultats: P>
java.util.timer http://img175.imageshack.us/img175/8876/capturadepantalla201006O .png p>
La version Javax.swing.Timer était toujours environ une demi-seconde derrière: p>
Javax.swing.Timer http://img241.imagesShack.us/img241/2599/capturadepantalalA201006.png P>
Je n'ai vraiment pas t sais pourquoi. p>
voici la source complète: p> voici la source modifiée à l'aide de javax.swing.Timer p> je devrais probablement changer la chaîne avec le La date est calculée, mais je ne pense pas que ce soit le problème ici em> sub> p> J'ai lu, que, depuis Java 5, le recommandé est: ScheduleedExecutetorservice Je vous laisse la tâche de la mettre en œuvre. P> < / p>
Je ne sais pas, c'est probablement le temps de démarrage (d'entrer dans l'EDT ou quelque chose) mais je ne pouvais pas les récupérer.
public void start(){ reset(); ScheduledExecutorService worker = Executors.newScheduledThreadPool(3); worker.scheduleAtFixedRate( new Runnable(){ public void run(){ if( currentSecond == 60 ) { reset(); } time.setText( String.format("%s:%02d", sdf.format(calendar.getTime()), currentSecond)); currentSecond++; } }, 0, 1000 ,TimeUnit.MILLISECONDS ); }
Remarque La méthode planifiezeatfixeDrate code> est utilisée ici em>
Timer timer = new Timer(1000, (ActionEvent e) -> { DateTimeFormatter myTime = DateTimeFormatter.ofPattern("HH:mm:ss"); LocalDateTime now = LocalDateTime.now(); jLabel1.setText(String.valueOf(myTime.format(now))); }); timer.setRepeats(true); timer.start();
Bonjour, bienvenue dans le débordement de la pile. Lorsque vous répondez à une question qui a déjà de nombreuses réponses, assurez-vous d'ajouter des informations supplémentaires sur la raison pour laquelle la réponse que vous fournissez est de fond et ne faisait pas simplement écho à ce qui a déjà été vérifié par l'affiche originale. Ceci est particulièrement important dans les réponses «Code-uniquement» telles que celle que vous avez fournie.
Je ne balance pas beaucoup, alors aucune réponse détaillée du mien, mais Google semble donner suffisamment d'astuces: Google.com/search?q=java+Swing+Clock au point: vous devez mettre à jour l'horloge vous-même i> chaque fois dans un fil d'arrière-plan.
@Ballusc mais vous faites de manière approfondie Google;)