Java for-loop Delay?
Hi,
einfache Frage: wie kann ich eine For-Schleife mit jeweils einem delay ausführen?
Beispiel:
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Melon");
for(String fruit : fruits) {
System.out.println(fruit);
// wait 1000ms
}
Hier soll dann jede Sekunde ein String ausgegeben werden.
Ist das möglich? Wenn ja wie?
Vielen Dank.
LG
3 Antworten
Du könntest Timer.scheduleAtFixedRate benutzen.
Hier als Methode:
public static void delayLoopAsync(ArrayList<?> array) {
final Timer utilTimer = new Timer();
utilTimer.scheduleAtFixedRate(new TimerTask() {
private int index = 0;
public void run() {
//Dein Code hier (falls du etwas anderes machen willst ausser printen)
System.out.println(array.get(index));
index++;
if (index >= array.size()) {
utilTimer.cancel();
}
}
}, 0L, 1000L);
}
Du kannst dann einfach
delayLoopAsync(fruits);
aufrufen.
Einfach mit Thread.sleep():
for(String fruit : fruits) {
System.out.println(fruit);
try {
Thread.sleep(1000);
}
catch(InterruptedException ex) { /* Error Handling ... */ }
}
Oder mit TimeUnit's Sleep (benutzt im Hintergrund auch Thread.sleep()):
for(String fruit : fruits) {
System.out.println(fruit);
try {
TimeUnit.SECONDS.sleep(1);
}
catch(InterruptedException ex) { /* Error Handling ... */ }
}
Danke erstmal für die Antwort.
Das habe ich auch schon versucht, jedoch pausiere ich ja dadurch das Programm, richtig?
Gäbe es vielleicht eine Möglichkeit das im Hintergrund laufen zu lassen?
Thread.sleep
causes the current thread to suspend execution for a specified period. This is an efficient means of making processor time available to the other threads of an application or other applications that might be running on a computer system.
Das ist genau das, was du willst.
Oder was meinst du mit einem delay, das keine Pause ist?
Du kannst das einfach in einem neuen Thread ausführen. Dann läuft dein Main-Thread währenddessen weiter.
new Thread(() -> {
for(String fruit : fruits) {
System.out.println(fruit);
try {
Thread.sleep(1000);
} catch(InterruptedException ex) { /* Error Handling ... */ }
}
}).start();
weil es keine Checked Exception wirft.
Chic. Wieder was gelernt ;-)