Ich habe versucht, mein Java-Programm zu verzögern oder in den Ruhezustand zu versetzen, aber es tritt ein Fehler auf.
Ich kann Thread.sleep(x)
oder nicht verwenden wait()
. Die gleiche Fehlermeldung wird angezeigt:
nicht gemeldete Ausnahme java.lang.InterruptedException; muss gefangen oder zum Werfen erklärt werden.
Ist vor der Verwendung der Methoden Thread.sleep()
oder ein Schritt erforderlich wait()
?
Antworten:
Sie haben viel zu lesen. Von Compilerfehlern über Ausnahmebehandlung, Threading und Threadunterbrechungen. Aber das wird machen was du willst:
quelle
Wie andere Benutzer bereits gesagt haben, sollten Sie Ihren Anruf mit einem
try{...} catch{...}
Block umgeben. Seit der Veröffentlichung von Java 1.5 gibt es jedoch eine TimeUnit-Klasse, die das Gleiche wie Thread.sleep (Millis) tut, jedoch praktischer ist. Sie können die Zeiteinheit für den Schlafbetrieb auswählen.Außerdem gibt es zusätzliche Methoden: TimeUnit Oracle Documentation
quelle
try-catch
Ausnahmebehandlung umgeben.Schauen Sie sich diesen ausgezeichneten kurzen Beitrag an, wie man das richtig macht.
Im Wesentlichen: fangen Sie die
InterruptedException
. Denken Sie daran, dass Sie diesen Catch-Block hinzufügen müssen. Der Beitrag erklärt dies etwas weiter.quelle
Verwenden Sie das folgende Codierungskonstrukt, um Ausnahmen zu behandeln
quelle
Legen Sie Ihre
Thread.sleep
in einen Try-Catch-Blockquelle
Bei Verwendung von Android (das einzige Mal, wenn ich Java verwende) würde ich empfehlen, einen Handler zu verwenden, anstatt den Thread in den Ruhezustand zu versetzen.
Referenz: http://developer.android.com/reference/android/os/Handler.html
quelle
Versuche dies:
quelle
Exception
in Java zu fangen ?Meine Möglichkeiten, einem Java-Programm eine Verzögerung hinzuzufügen.
Dies gilt für sequentielle Verzögerungen. Schleifenverzögerungen finden Sie unter Java Delay / Wait .
quelle
z.B:-
quelle
Eine einfachere Möglichkeit zu warten ist die Verwendung
System.currentTimeMillis()
, die die Anzahl der Millisekunden seit Mitternacht am 1. Januar 1970 UTC zurückgibt. Zum Beispiel, um 5 Sekunden zu warten:Auf diese Weise müssen Sie nicht mit Threads und Ausnahmen herumspielen. Hoffe das hilft!
quelle
Verwendung
java.util.concurrent.TimeUnit
:Schlaf für eine Sekunde oder
Schlaf eine Minute.
Da dies eine Schleife ist, stellt dies ein inhärentes Problem dar - Drift. Jedes Mal, wenn Sie Code ausführen und dann schlafen, werden Sie beispielsweise jede Sekunde ein wenig vom Laufen abweichen. Wenn dies ein Problem ist, verwenden Sie es nicht
sleep
.Darüber hinaus
sleep
ist nicht sehr flexibel, wenn es um Kontrolle geht.Um eine Aufgabe jede Sekunde oder mit einer Verzögerung von einer Sekunde auszuführen, würde ich dringend eine [
ScheduledExecutorService
] [1] und entweder [scheduleAtFixedRate
] [2] oder [scheduleWithFixedDelay
] [3] empfehlen .So führen Sie die Methode
myTask
jede Sekunde aus (Java 8):quelle
Thread.sleep()
ist für Anfänger einfach und eignet sich möglicherweise für Unit-Tests und Proofs of Concept.Aber bitte NICHT verwenden
sleep()
für die Produktion Code. Schließlichsleep()
kann man schlecht beißen.Best Practice für Multithread- / Multicore-Java-Anwendungen zur Verwendung des "Thread Wait" -Konzepts. Wait gibt alle Sperren und Monitore frei, die vom Thread gehalten werden, sodass andere Threads diese Monitore erfassen und fortfahren können, während Ihr Thread ruhig schläft.
Der folgende Code demonstriert diese Technik:
DelayUtil
Implementierung:quelle
Wenn Sie sich nicht mit Threads befassen möchten, versuchen Sie alternativ diese Methode:
Es beginnt, wenn Sie es aufrufen, und endet, wenn die Anzahl der Sekunden vergangen ist.
quelle