Ich möchte eine Uhr in meinem Programm implementieren, um das Datum und die Uhrzeit während des Programmlaufs zu ändern. Ich habe in die getCurrentTime()
-Methode und Timer
s geschaut, aber keiner von ihnen scheint zu tun, was ich möchte.
Das Problem ist, dass ich die aktuelle Zeit abrufen kann, wenn das Programm geladen wird, aber es wird nie aktualisiert. Irgendwelche Vorschläge auf etwas, um zu prüfen, würden sehr geschätzt!
Was Sie tun müssen, ist Swing Timer
Klasse.
Lass es einfach jede Sekunde laufen und aktualisiere die Uhr mit der aktuellen Zeit.
%Vor% Dies bewirkt, dass updateClockAction
einmal pro Sekunde ausgelöst wird. Es wird auf dem EDT laufen.
Sie können updateClockAction
ähnlich wie folgt aussehen lassen:
Da dies die Uhr jede Sekunde aktualisiert, ist die Uhr im schlimmsten Fall um 999 ms ausgeschaltet. Um dies auf eine schlechtere Fallfehlerspanne von 99 ms zu erhöhen, können Sie die Aktualisierungshäufigkeit erhöhen:
%Vor%Sie müssen den Text jede Sekunde in einem separaten Thread aktualisieren.
Idealerweise sollten Sie die Swing-Komponente nur im EDT (Event-Dispatcher-Thread) aktualisieren, aber nachdem ich sie auf meinem Computer ausprobiert habe, verwenden Sie Timer.scheduleAtFixRate gab mir bessere Ergebnisse:
java.util.Timer http://img175.imageshack.us/img175/8876/capturadepantalla201006o.png
Die Version javax.swing.Timer war immer ungefähr eine halbe Sekunde dahinter:
javax.swing.Timer http://img241.imageshack.us/img241/2599/capturadepantalla201006.png
Ich weiß wirklich nicht warum.
Hier ist die vollständige Quelle:
%Vor%Hier ist die modifizierte Quelle mit javax.swing.Timer
%Vor%Wahrscheinlich sollte ich die Art ändern, wie die Zeichenfolge mit dem Datum berechnet wird, aber ich glaube nicht, dass das hier das Problem ist
Ich habe gelesen, dass seit Java 5 empfohlen wird: ScheduledExecutorService Ich überlasse Ihnen die Aufgabe, es zu implementieren.
Das klingt nach einem konzeptionellen Problem. Wenn Sie ein neues java.util.Date-Objekt erstellen, wird es auf die aktuelle Zeit initialisiert. Wenn Sie eine Uhr implementieren möchten, können Sie eine GUI-Komponente erstellen, die ständig ein neues Date-Objekt erstellt und die Anzeige mit dem neuesten Wert aktualisiert.
Eine Frage, die Sie vielleicht haben, ist, wie Sie wiederholt etwas nach einem Zeitplan tun können? Sie könnten eine Endlosschleife haben, die ein neues Date-Objekt erstellt und dann Thread.sleep (1000) aufruft, so dass es jede Sekunde die letzte Zeit erhält. Eine elegantere Methode ist das Verwenden einer TimerTask. Normalerweise tun Sie etwas wie:
%Vor%Um es dann aufzurufen, würden Sie etwas tun wie:
%Vor%Für diejenigen, die eine analoge Anzeige bevorzugen: Analog Clock JApplet .