paneles - ¿Cómo hago un retraso en Java?
table swing java (5)
Estoy tratando de hacer algo en Java y necesito algo para esperar / demorar una cantidad de segundos en un bucle de tiempo.
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++;
}
Quiero construir un secuenciador de pasos y soy nuevo en Java. ¿Alguna sugerencia?
Necesitas usar la llamada Thread.sleep()
.
Más información aquí: sleep()
Si desea hacer una pausa, use java.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
Dormir por un segundo o
TimeUnit.MINUTES.sleep(1);
Para dormir un minuto.
Como esto es un bucle, esto presenta un problema inherente: la deriva. Cada vez que ejecute el código y luego duerma, se desviará un poco de la ejecución, digamos, cada segundo. Si esto es un problema, entonces no use el sleep
.
Además, el sleep
no es muy flexible cuando se trata de controlar.
Para ejecutar una tarea cada segundo o con un retraso de un segundo, recomendaría encarecidamente ScheduledExecutorService
y scheduleAtFixedRate
o scheduleWithFixedDelay
.
Por ejemplo, para ejecutar el método myTask
cada segundo (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");
}
Y en 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");
}
Utilice Thread.sleep(1000)
;
1000
es el número de milisegundos que el programa hará una pausa.
try
{
Thread.sleep(1000);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
Utilizando TimeUnit.SECONDS.sleep(1);
o Thread.sleep(1000);
Es una forma aceptable de hacerlo. En ambos casos, debe capturar InterruptedException
que hace que su código sea Bulky. Hay una biblioteca java de código abierto llamada MgntUtils (escrita por mí) que proporciona una utilidad que ya se ocupa de InterruptedException
. Entonces tu código solo incluiría una línea:
TimeUtils.sleepFor(1, TimeUnit.SECONDS);
Ver el javadoc here . Puede acceder a la biblioteca desde Maven Central o desde Github . El artículo explicativo sobre la biblioteca se puede encontrar here
utilizar Thread.sleep (100); La unidad de tiempo es milisegundos.
para un ejemplo
public class SleepMessages {
public static void main(String args[])
throws InterruptedException {
String importantInfo[] = {
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
for (int i = 0;
i < importantInfo.length;
i++) {
//Pause for 4 seconds
Thread.sleep(4000);
//Print a message
System.out.println(importantInfo[i]);
}
}
}