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?

1137voto

Boris the Spider Punkte 59573

Wenn Sie pausieren möchten, verwenden Sie java.util.concurrent.TimeUnit:

TimeUnit.SECONDS.sleep(1);

Um eine Sekunde lang zu schlafen oder

TimeUnit.MINUTES.sleep(1);

Um eine Minute zu schlafen.

Da es sich um eine Schleife handelt, tritt ein inhärentes Problem auf - die Drift. Jedes Mal, wenn Sie Code ausführen und dann schlafen, entfernen Sie sich ein wenig davon, zum Beispiel alle Sekunde zu laufen. Wenn dies ein Problem darstellt, verwenden Sie nicht sleep.

Des Weiteren ist sleep nicht sehr flexibel, wenn es um die Steuerung geht.

Um eine Aufgabe jede Sekunde auszuführen oder mit einer Verzögerung von einer Sekunde empfehle ich nachdrücklich ein ScheduledExecutorService und entweder scheduleAtFixedRate oder scheduleWithFixedDelay.

Zum Beispiel, um die Methode myTask jede Sekunde auszuführen (Java 8):

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

Und in Java 7:

public static void main(String[] args) {
    final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            myTask();
        }
    }, 0, 1, TimeUnit.SECONDS);
}

private static void myTask() {
    System.out.println("Running");
}

231voto

Anju Aravind Punkte 3332

Verwenden Sie Thread.sleep(1000);

1000 ist die Anzahl der Millisekunden, die das Programm angehalten wird.

try {
  Thread.sleep(1000);
} catch (InterruptedException e) {
  Thread.currentThread().interrupt();
}

33voto

Hecanet Punkte 401

Verwenden Sie dies:

public static void wait(int ms)
{
    try
    {
        Thread.sleep(ms);
    }
    catch(InterruptedException ex)
    {
        Thread.currentThread().interrupt();
    }
}

und dann können Sie diese Methode überall aufrufen, wie zum Beispiel:

wait(1000);

11voto

Ruslan Punkte 2567

Sie müssen den Thread.sleep()-Aufruf verwenden.

Weitere Informationen hier: https://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html

7voto

Bachan Joseph Punkte 289

Verwenden Sie Thread.sleep(100);. Die Zeiteinheit sind Millisekunden

Zum Beispiel:

public class SleepMessages {
    public static void main(String args[])
        throws InterruptedException {
        String importantInfo[] = {
            "Stuten fressen Hafer",
            "Esel fressen Hafer",
            "Kleine Lämmer fressen Efeu",
            "Ein Kind wird auch Efeu fressen"
        };

        for (int i = 0;
             i < importantInfo.length;
             i++) {
            //Pause for 4 seconds
            Thread.sleep(4000);
            //Print a message
            System.out.println(importantInfo[i]);
        }
    }
}

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