Tentei atrasar - ou adormecer - meu programa Java, mas ocorreu um erro.
Não consigo usar Thread.sleep(x)
ou wait()
. A mesma mensagem de erro aparece:
exceção não relatada java.lang.InterruptedException; deve ser capturado ou declarado lançado.
É necessário executar alguma etapa antes de usar os métodos Thread.sleep()
ou wait()
?
Respostas:
Você tem muita leitura pela frente. Desde erros do compilador até manipulação de exceções, encadeamento e interrupções de encadeamento. Mas isso fará o que você deseja:
fonte
Como outros usuários disseram, você deve cercar sua chamada com um
try{...} catch{...}
bloco. Mas desde que o Java 1.5 foi lançado, há a classe TimeUnit que faz o mesmo que Thread.sleep (millis), mas é mais conveniente. Você pode escolher a unidade de tempo para operação em suspensão.Também possui métodos adicionais: TimeUnit Oracle Documentation
fonte
try-catch
tratamento de exceção necessário .Dê uma olhada neste excelente post breve sobre como fazer isso corretamente.
Essencialmente: pegue o
InterruptedException
. Lembre-se de que você deve adicionar esse catch-block. O post explica isso um pouco mais.fonte
Use a seguinte construção de codificação para manipular exceções
fonte
Coloque o seu
Thread.sleep
em um bloco catch tryfonte
Ao usar o Android (o único momento em que uso Java), recomendo o uso de um manipulador, em vez de colocar o thread em suspensão.
Referência: http://developer.android.com/reference/android/os/Handler.html
fonte
Tente o seguinte:
fonte
Exception
em Java?Minhas maneiras de adicionar atraso a um programa Java.
Isso é para atraso seqüencial, mas para atrasos de loop, consulte Java Delay / Wait .
fonte
por exemplo:-
fonte
Uma maneira mais simples de esperar é usar
System.currentTimeMillis()
, que retorna o número de milissegundos desde a meia-noite de 1 de janeiro de 1970 no UTC. Por exemplo, para aguardar 5 segundos:Dessa forma, você não precisa se preocupar com threads e exceções. Espero que isto ajude!
fonte
Use
java.util.concurrent.TimeUnit
:Durma por um segundo ou
Durma por um minuto.
Como se trata de um loop, isso apresenta um problema inerente - desvio. Toda vez que você executa o código e, em seguida, dorme, estará um pouco à deriva, digamos, a cada segundo. Se este for um problema, não use
sleep
.Além disso,
sleep
não é muito flexível quando se trata de controle.Para executar uma tarefa a cada segundo ou com um atraso de um segundo, recomendo fortemente um [
ScheduledExecutorService
] [1] e [scheduleAtFixedRate
] [2] ou [scheduleWithFixedDelay
] [3].Para executar o método a
myTask
cada segundo (Java 8):fonte
Thread.sleep()
é simples para iniciantes e pode ser apropriado para testes de unidade e provas de conceito.Mas por favor, NÃO use
sleep()
para código de produção. Eventualmentesleep()
pode morder você muito.Prática recomendada para aplicativos Java multithread / multicore para usar o conceito "thread wait". O Wait libera todos os bloqueios e monitores mantidos pelo encadeamento, o que permite que outros encadeamentos adquiram esses monitores e prossigam enquanto o encadeamento está dormindo pacificamente.
O código abaixo demonstra essa técnica:
DelayUtil
implementação:fonte
Como alternativa, se você não quiser lidar com threads, tente este método:
Começa quando você liga e termina quando o número de segundos se passa.
fonte