Das klingt wie ein Problem mit Zeiteinheiten für mich. Stellen Sie sicher, dass Sie korrekt in Millisekunden konvertieren.
Der einfachste Weg, dies zu tun ist, Java TimeUnit
zu verwenden.
Timer cleaner = new Timer(true);
cleaner.scheduleAtFixedRate(new MyTimerTask(),
TimeUnit.SECONDS.toMillis(10),
TimeUnit.SECONDS.toMillis(30));
Es ist auch von der Timer
gestartet im Daemon-Modus verursacht werden könnten. Wenn all Ihre Hauptmethode den Timer einrichtet und dann zurückgibt, wird der Timer nie ausgeführt, da es der letzte verbleibende Thread ist und weil es ein Daemon-Thread ist, wird die JVM beendet.
Um dies zu beheben, machen Sie den Timer-Thread nicht zu einem Daemon (d. H. Übergeben Sie false
im Konstruktor) oder lassen Sie den Haupt-Thread vor dem Beenden auf Benutzereingaben warten.
Hier ist ein Beispiel sowohl die oben mit:
public class TimerDemo extends TimerTask {
public void run() {
System.out.printf("Time is now %s%n", LocalTime.now());
}
public static void main(String[] args) throws IOException {
Timer timer = new Timer(true);
timer.scheduleAtFixedRate(new TimerDemo(),
TimeUnit.SECONDS.toMillis(5),
TimeUnit.SECONDS.toMillis(10));
System.out.printf("Program started at %s%n", LocalTime.now());
System.out.println("Press enter to exit");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
// Wait for user to press enter
reader.readLine();
}
System.out.println("Bye!");
}
}
Und Ausgabe, die es laufen:
Program started at 14:49:42.207
Press enter to exit
Time is now 14:49:46.800
Time is now 14:49:56.799
Time is now 14:50:06.799
Time is now 14:50:16.799
Time is now 14:50:26.799
[I pressed 'enter']
Bye!
Process finished with exit code 0
Ja, Sie haben Recht Raniz. Das Problem wurde nach dem Beenden der Hauptmethode die run-Methode nicht ausgeführt. Also, ich muss schlafen im Hauptthread. –
Fühlen Sie sich frei, meine Antwort zu akzeptieren, wenn es das Problem für Sie gelöst hat. Es hilft anderen, indem diese Frage in den Suchergebnissen als gelöst angezeigt wird. – Raniz