Dynamische Uhr in Java

8

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!

    
jt153 02.06.2010, 16:41
quelle

6 Antworten

13

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:

%Vor%

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%     
jjnguy 02.06.2010 16:53
quelle
5

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.

    
OscarRyz 02.06.2010 17:53
quelle
3
%Vor%     
vishnubalaji 15.11.2012 12:26
quelle
2

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%     
PhilDin 02.06.2010 17:10
quelle
2

Für diejenigen, die eine analoge Anzeige bevorzugen: Analog Clock JApplet .

    
trashgod 02.06.2010 18:27
quelle
0

Beachten Sie, dass hier die Methode scheduleAtFixedRate verwendet wird

%Vor%     
shareef 17.04.2015 18:08
quelle

Tags und Links