Ich versuche etwas in Java zu tun und ich brauche etwas, um einige Sekunden in einer while-Schleife zu warten / zu verzögern.
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
// I need to wait here
ceva[i].setSelected(false);
// I need to wait here
i++;
}
Ich möchte einen Step-Sequenzer bauen und bin neu in Java. Irgendwelche Vorschläge?
java
wait
sleep
thread-sleep
ardb
quelle
quelle
Thread.Sleep()
.Thread.sleep(<milisecondsToSleep>)
. Dass
sollte nicht groß geschrieben werden.Antworten:
Wenn Sie pausieren möchten, verwenden Sie
java.util.concurrent.TimeUnit
:Eine Sekunde schlafen oder
Eine Minute schlafen.
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 ein
ScheduledExecutorService
und entwederscheduleAtFixedRate
oder empfehlenscheduleWithFixedDelay
.So führen Sie die Methode beispielsweise
myTask
jede Sekunde aus (Java 8):Und in Java 7:
quelle
TimeUnit.SECONDS.wait(1)
wirftIllegalMonitorStateException
in Java 8.1 Build 31 unter Windows 6.3. Stattdessen kann ichThread.sleep(1000)
ohne Try / Catch verwenden.Unhandled exception: java.lang.InterruptedExecution
für diesleep(1)
TimeUnit.SECONDS.sleep(1);
mittry catch
Verwenden Sie
Thread.sleep(1000)
;1000
ist die Anzahl der Millisekunden, die das Programm pausiert.quelle
Sie müssen den
Thread.sleep()
Anruf verwenden.Weitere Informationen finden Sie hier: http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
quelle
benutze das:
Dann können Sie diese Methode wie folgt aufrufen:
quelle
Verwenden von
TimeUnit.SECONDS.sleep(1);
oderThread.sleep(1000);
ist ein akzeptabler Weg, dies zu tun. In beiden Fällen müssen Sie abfangenInterruptedException
, was Ihren Code sperrig macht. Es gibt eine Open Source-Java-Bibliothek namens MgntUtils (von mir geschrieben), die ein Dienstprogramm bereitstellt, das sich bereits mit demInterruptedException
Inneren befasst . Ihr Code würde also nur eine Zeile enthalten:Sehen Sie den Javadoc hier . Sie können von Maven Central oder von Github aus auf die Bibliothek zugreifen . Den Artikel zur Bibliothek finden Sie hier
quelle
catch (InterruptedException e) { /* empty */ }
ist hier KEINE sinnvolle Lösung. Zumindest sollten Sie einige Protokollinformationen angeben. Weitere Informationen zu diesem Thema finden Sie unter javaspecialists.eu/archive/Issue056.htmlVerwenden Sie
Thread.sleep(100);
. Die Zeiteinheit ist MillisekundenZum Beispiel:
quelle
Ich weiß, dass dies ein sehr alter Beitrag ist, aber dies kann jemandem helfen: Sie können eine Methode erstellen. Wenn Sie also eine Pause einlegen müssen, können Sie
pause(1000)
einen anderen Millisekundenwert eingeben:Dies wird direkt über
public static void main(String[] args)
der Klasse eingefügt . Geben Sie dann zum Aufrufen der Methode Folgendes einpause(ms)
, ersetzen Sie es jedoch durchms
die Anzahl der Millisekunden, die angehalten werden sollen. Auf diese Weise müssen Sie nicht die gesamte try-catch-Anweisung einfügen, wenn Sie eine Pause einlegen möchten.quelle