581 Stimmen

Wie erstelle ich eine Verzögerung in Java?

Ich versuche, etwas in Java zu machen und ich brauche etwas, das in einer While-Schleife eine bestimmte Anzahl von Sekunden wartet / verzögert.

while (true) {
    if (i == 3) {
        i = 0;
    }

    ceva[i].setSelected(true);

    // Hier muss ich warten

    ceva[i].setSelected(false);

    // Hier muss ich warten

    i++;
}

Ich möchte einen Step-Sequenzer bauen.

Wie mache ich eine Verzögerung in Java?

5voto

Michael Gantman Punkte 5746

Die Verwendung von TimeUnit.SECONDS.sleep(1); oder Thread.sleep(1000); ist akzeptabel. In beiden Fällen müssen Sie InterruptedException abfangen, was Ihren Code unübersichtlich macht. Es gibt eine Open-Source-Java-Bibliothek namens MgntUtils (von mir geschrieben), die bereits ein Dienstprogramm bereitstellt, das InterruptedException intern behandelt. Daher würde Ihr Code nur eine Zeile enthalten:

TimeUtils.sleepFor(1, TimeUnit.SECONDS);

Sehen Sie sich das Javadoc hier an. Sie können auf die Bibliothek von Maven Central oder von GitHub zugreifen. Den Artikel, der die Bibliothek erklärt, finden Sie hier.

3voto

Nolequen Punkte 2355

Es gibt auch noch eine andere Möglichkeit zu warten.

Sie können die LockSupport Methoden verwenden, z.B.:

LockSupport.parkNanos(1_000_000_000); // Deaktiviert den aktuellen Thread zur Planung für höchstens 1 Sekunde

Zum Glück werfen sie keine überprüfte Ausnahme. Aber gemäß der Dokumentation gibt es andererseits mehr Gründe, warum ein Thread aktiviert werden könnte:

  • Ein anderer Thread ruft unpark mit dem aktuellen Thread als Ziel auf
  • Ein anderer Thread unterbricht den aktuellen Thread

2voto

dominic03 Punkte 131

Ich weiß, dass dies ein sehr alter Beitrag ist, aber das könnte jemandem helfen: Sie können eine Methode erstellen, so dass Sie immer, wenn Sie pausieren müssen, pause(1000) oder einen anderen Millisekundenwert eingeben können:

public static void pause(int ms) {
    try {
        Thread.sleep(ms);
    } catch (InterruptedException e) {
        System.err.format("Unterbrechungsausnahme : %s%n", e);
    }
}

Dies wird direkt über dem public static void main(String[] args) innerhalb der Klasse eingefügt. Dann, um die Methode aufzurufen, geben Sie pause(ms) ein, ersetzen Sie jedoch ms durch die Anzahl der Millisekunden, um zu pausieren. Auf diese Weise müssen Sie nicht jedes Mal das gesamte try-catch-Statement einfügen, wenn Sie pausieren möchten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X