Estou tentando fazer algo em Java e preciso de algo para esperar / atrasar por alguns segundos em um loop 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++;
}
Quero criar um sequenciador de etapas e sou novo em Java. Alguma sugestão?
java
wait
sleep
thread-sleep
ardb
fonte
fonte
Thread.Sleep()
.Thread.sleep(<milisecondsToSleep>)
. Os
não deve ser capitalizado.Respostas:
Se você deseja fazer uma pausa, use
java.util.concurrent.TimeUnit
:Dormir por um segundo ou
Dormir 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 vivamente um
ScheduledExecutorService
e ouscheduleAtFixedRate
ouscheduleWithFixedDelay
.Por exemplo, para executar o método a
myTask
cada segundo (Java 8):E no Java 7:
fonte
TimeUnit.SECONDS.wait(1)
está lançandoIllegalMonitorStateException
no Java 8.1 build 31 no Windows 6.3. Em vez disso, sou capaz de usarThread.sleep(1000)
sem uma tentativa / captura.Unhandled exception: java.lang.InterruptedExecution
para osleep(1)
TimeUnit.SECONDS.sleep(1);
comtry catch
Use
Thread.sleep(1000)
;1000
é o número de milissegundos que o programa fará uma pausa.fonte
Você precisa usar a
Thread.sleep()
chamada.Mais informações aqui: http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
fonte
usa isto:
então você pode chamar esse método em qualquer lugar como:
fonte
Usando
TimeUnit.SECONDS.sleep(1);
ouThread.sleep(1000);
É uma maneira aceitável de fazer isso. Nos dois casos, você precisa capturar oInterruptedException
que torna seu código Bulky. Existe uma biblioteca java de código aberto chamada MgntUtils (escrita por mim) que fornece um utilitário que já lida com oInterruptedException
interior. Portanto, seu código incluiria apenas uma linha:Veja o javadoc aqui . Você pode acessar a biblioteca do Maven Central ou do Github . O artigo explicando sobre a biblioteca pode ser encontrado aqui
fonte
catch (InterruptedException e) { /* empty */ }
é uma solução sensata aqui. No mínimo, você deve fornecer algumas informações de log. Para mais informações sobre o assunto, consulte javaspecialists.eu/archive/Issue056.htmlUse
Thread.sleep(100);
. A unidade de tempo é milissegundosPor exemplo:
fonte
Sei que esta é uma postagem muito antiga, mas isso pode ajudar alguém: Você pode criar um método; portanto, sempre que precisar fazer uma pausa, digite
pause(1000)
ou qualquer outro valor em milissegundo:Isso é inserido logo acima do
public static void main(String[] args)
, dentro da classe. Em seguida, para chamar o método, digitepause(ms)
mas substituams
pelo número de milissegundos para pausar. Dessa forma, você não precisa inserir a instrução try-catch inteira sempre que quiser pausar.fonte