He intentado retrasar, o poner en suspensión, mi programa Java, pero se produce un error.
No puedo usar Thread.sleep(x)
o wait()
. Aparece el mismo mensaje de error:
excepción no declarada java.lang.InterruptedException; debe ser atrapado o declarado ser arrojado.
¿Se requiere algún paso antes de usar los métodos Thread.sleep()
o wait()
?
Respuestas:
Tienes mucha lectura por delante. Desde errores del compilador hasta manejo de excepciones, subprocesos e interrupciones de subprocesos. Pero esto hará lo que quieras:
fuente
Como han dicho otros usuarios, debe rodear su llamada con un
try{...} catch{...}
bloqueo. Pero desde que se lanzó Java 1.5, hay una clase TimeUnit que hace lo mismo que Thread.sleep (millis) pero es más conveniente. Puede elegir la unidad de tiempo para la operación de reposo.También tiene métodos adicionales: TimeUnit Oracle Documentation
fuente
try-catch
manejo de excepciones requerido .Echa un vistazo a esta excelente breve publicación sobre cómo hacer esto correctamente.
Esencialmente: atrapar el
InterruptedException
. Recuerde que debe agregar este bloque de captura. La publicación explica esto un poco más.fuente
Use la siguiente construcción de codificación para manejar excepciones
fuente
Prueba tu
Thread.sleep
bloque de capturafuente
Cuando uso Android (la única vez que uso Java) recomendaría usar un controlador en lugar de poner el hilo a dormir.
Referencia: http://developer.android.com/reference/android/os/Handler.html
fuente
Prueba esto:
fuente
Exception
en Java?Mis formas de agregar demora a un programa Java.
Esto es para el retraso secuencial, pero para los retrasos de bucle, consulte Java Delay / Wait .
fuente
p.ej:-
fuente
Una forma más simple de esperar es usar
System.currentTimeMillis()
, que devuelve el número de milisegundos desde la medianoche del 1 de enero de 1970 UTC. Por ejemplo, para esperar 5 segundos:De esta manera, no tiene que perder el tiempo con hilos y excepciones. ¡Espero que esto ayude!
fuente
Uso
java.util.concurrent.TimeUnit
:Duerme un segundo o
Duerme 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 retraso de un segundo, recomendaría encarecidamente un [
ScheduledExecutorService
] [1] y [scheduleAtFixedRate
] [2] o [scheduleWithFixedDelay
] [3].Para ejecutar el método
myTask
cada segundo (Java 8):fuente
Thread.sleep()
es simple para los principiantes y puede ser apropiado para pruebas unitarias y pruebas de concepto.Pero por favor NO lo use
sleep()
para el código de producción. Eventualmentesleep()
puede morderte mucho.La mejor práctica para aplicaciones java multiproceso / multinúcleo para utilizar el concepto de "hilo de espera". Esperar libera todos los bloqueos y monitores que mantiene el hilo, lo que permite que otros hilos adquieran esos monitores y continúen mientras su hilo duerme pacíficamente.
El siguiente código demuestra esa técnica:
DelayUtil
implementación:fuente
Alternativamente, si no quieres lidiar con hilos, prueba este método:
Comienza cuando lo llamas y termina cuando han pasado la cantidad de segundos.
fuente