Estoy tratando de hacer algo en Java y necesito algo para esperar / retrasar una cantidad de segundos en un bucle while.
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 por pasos y soy nuevo en Java. ¿Alguna sugerencia?
java
wait
sleep
thread-sleep
ardb
fuente
fuente
Thread.Sleep()
.Thread.sleep(<milisecondsToSleep>)
. Els
no debe ser capitalizado.Respuestas:
Si quieres hacer una pausa, usa
java.util.concurrent.TimeUnit
:Para dormir por un segundo o
A dormir un minuto.
Como se trata de un bucle, esto presenta un problema inherente: la deriva. Cada vez que ejecute el código y luego duerma, perderá un poco la ejecución, por ejemplo, cada segundo. Si esto es un problema, no lo use
sleep
.Además,
sleep
no es muy flexible cuando se trata de control.Para ejecutar una tarea cada segundo o con un segundo de retraso, recomendaría encarecidamente a
ScheduledExecutorService
y oscheduleAtFixedRate
oscheduleWithFixedDelay
.Por ejemplo, para ejecutar el método
myTask
cada segundo (Java 8):Y en Java 7:
fuente
TimeUnit.SECONDS.wait(1)
está lanzandoIllegalMonitorStateException
Java 8.1 build 31 en Windows 6.3. En cambio, puedo usarThread.sleep(1000)
sin un try / catch.Unhandled exception: java.lang.InterruptedExecution
para elsleep(1)
TimeUnit.SECONDS.sleep(1);
contry catch
Uso
Thread.sleep(1000)
;1000
es la cantidad de milisegundos que el programa hará una pausa.fuente
Necesitas usar la
Thread.sleep()
llamada.Más información aquí: http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
fuente
utilizar este:
entonces puedes llamar a este método en cualquier lugar como:
fuente
Usar
TimeUnit.SECONDS.sleep(1);
oThread.sleep(1000);
es una forma aceptable de hacerlo. En ambos casos, debe atrapar loInterruptedException
que hace que su código sea voluminoso. Hay una biblioteca Java de código abierto llamada MgntUtils (escrita por mí) que proporciona una utilidad que ya trata con elInterruptedException
interior. Entonces su código solo incluiría una línea:Ver el javadoc aquí . Puede acceder a la biblioteca desde Maven Central o desde Github . El artículo que explica sobre la biblioteca se puede encontrar aquí.
fuente
catch (InterruptedException e) { /* empty */ }
es una solución sensata aquí. Como mínimo, debe proporcionar alguna información de registro. Para obtener más información sobre el tema, consulte javaspecialists.eu/archive/Issue056.htmlUso
Thread.sleep(100);
. La unidad de tiempo es milisegundos.Por ejemplo:
fuente
Sé que esta es una publicación muy antigua, pero puede ayudar a alguien: puede crear un método, por lo que cada vez que necesite hacer una pausa, puede escribir
pause(1000)
o cualquier otro valor de milisegundos:Esto se inserta justo encima de
public static void main(String[] args)
, dentro de la clase. Luego, para invocar el método, escribapause(ms)
pero reemplacems
con el número de milisegundos para pausar. De esa manera, no tiene que insertar toda la declaración try-catch cuando quiera hacer una pausa.fuente