2017-05-10 2 views
1

Mein Problem ist, dass ich brauche eine Uhr in meinem Code enthalten sein. Das Problem ist, dass ich nicht weiß, wie ich jede Sekunde inkrementiere, ohne den ganzen Code zu pausieren. Kann jemand mir einen besseren Weg sagen, oder kann mir jemand sagen, wie viele Sekunden pro Sekunde eine Variable in Java erhöhen kann, kann ich einfach% verwenden, um zu berechnen, wie oft die Uhr erhöht werden muss.Wie mache ich es so, dass Variable jede Sekunde im Hintergrund erhöht

Code:

int miniseconds = 0; 
    int seconds = 00; 
    int minutes = 00; 
    int hours = 00; 
    int day = 1; 
    int month = 1; 
    int years = 2280; 
    int yearLeap = years % 4; 
    long i; 
    for (i = 1000000000; i>0; i--){ 
    seconds ++; 
    try{ 
     Thread.sleep(1000);//2000ms = 2s 
    }catch(InterruptedException ex){ 
    } 
    if (seconds == 60){ 
     minutes ++; 
     seconds =0; 
    } 

    if (minutes == 60){ 
     hours++; 
     minutes = 0; 
    } 
    if (hours == 24){ 
     day++; 
     hours = 0; 
    } 
    if (month == 1 && day == 32){ 
     month ++; 
     day = 1; 

    } 
    if (month == 2 && day == 30 && yearLeap == 0) { 
     month ++; 
     day = 1; 
    } 
    if (month == 2 && day == 29 && yearLeap != 0){ 
     month ++; 
     day = 1; 
    } 
    if (month == 3 && day == 32){ 
     month ++; 
     day = 1; 
    } 
    if (month == 4 && day == 31){ 
     month ++; 
     day = 0; 
    } 
    if (month == 5 && day == 32){ 
     month ++; 
     day = 0; 
    } 
    if (month == 13){ 
     month = 1; 
      years ++; 
    } 
    String date = "The current time is: " +day+ "/" +month+ "/" +years+ " " +hours+ ":" +minutes+ ":" +seconds; 
    } 
+2

Hier wäre eine Javax.Swing.Timer-Klasse von Vorteil http://www.asjava.com/swing/java-timer-tutorial/ –

+2

oder 'ScheduledExecutorService' –

+0

Während ein' ScheduledExecutorService' dies tun würde, Haben Sie darüber nachgedacht, einfach 'java.time.Clock' zu verwenden? – slim

Antwort

0

Ich nehme an, das eine Art von Hausaufgaben ist, weil sonst Sie natürlich die interne Uhr nutzen könnten.

Sie müssen diese Aktualisierungslogik in einen neuen Thread einfügen, der parallel läuft. Schreibe ein runnable (This should get you started) und schließe dort eine Schleife ein (wahrscheinlich while(true)), die die Aktualisierung durchführt.

1

Ich habe das folgende Beispiel für Java-Timer an dieser Adresse entdeckt: http://www.asjava.com/swing/java-timer-tutorial/

Das Beispiel geht davon aus, dass Sie die Java.Swing Bibliotheken verwenden und dass Sie eine Benutzeroberfläche für Ihre Anwendung benötigen, anstatt mit der Konsole.


ClockLabel.java

// An extension of the JLabel class that listens to events from a Timer object to 
// update itself with the current date & time. 
import java.util.Date; 
import java.awt.event.*; 
import javax.swing.*; 

public class ClockLabel extends JLabel implements ActionListener { 
    public ClockLabel() { 
    super("" + new Date()); 
    Timer t = new Timer(1000, this); 
    t.start(); 
    } 
    public void actionPerformed(ActionEvent ae) { 
    setText((new Date()).toString()); 
    } 
} 

ClockTest.java

import javax.swing.*; 
import java.awt.*; 

public class ClockTest extends JFrame { 
    public ClockTest() { 
    super("Timer Demo"); 
    setSize(300, 100); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    ClockLabel clock = new ClockLabel(); 
    getContentPane().add(clock, BorderLayout.NORTH); 
    } 

    public static void main(String args[]) { 
    ClockTest ct = new ClockTest(); 
    ct.setVisible(true); 
+0

Akzeptable Antwort, wenn Sie bereits Swing verwenden. * Verwenden Sie Swing nicht nur für einen Timer. – slim

0

Dies wird jede Sekunde ein geeignetes Verfahren nennen:

Beachten Sie, dass es Probleme mit Multithread-Zugriff auf Variablen gibt, also sollten Sie sicherstellen, dass Sie Themen wie Atomarität, das Schlüsselwort volatile etc. verstehen, bevor Sie auf Variablen zwischen mehreren Threads vertrauen. Es gibt viele Bücher über Java Concurrency.

Sie scheinen jedoch eine Uhrklasse zu schreiben. Es gibt bereits java.time.Clock, was sehr flexibel und zuverlässig ist.

+0

@JaroslawPawlak danke, behoben. – slim

Verwandte Themen