Я пытаюсь что-то сделать в Java, и мне нужно что-то подождать / задержать на некоторое количество секунд в цикле 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++;
}
Я хочу построить пошаговый секвенсор, и я новичок в Java. Какие-либо предложения?
java
wait
sleep
thread-sleep
ardb
источник
источник
Thread.Sleep()
.Thread.sleep(<milisecondsToSleep>)
. Неs
должно быть заглавными.Ответы:
Если вы хотите сделать паузу, используйте
java.util.concurrent.TimeUnit
:Спать одну секунду или
Спать минуту.
Поскольку это цикл, это представляет собой внутреннюю проблему - дрейф. Каждый раз, когда вы запускаете код, а затем засыпаете, вы будете немного отвлекаться, скажем, каждую секунду. Если это проблема, не используйте
sleep
.Кроме того,
sleep
не очень гибкий, когда дело доходит до контроля.Для запуска задачи каждую секунду или с задержкой в одну секунду я настоятельно рекомендую a
ScheduledExecutorService
и либоscheduleAtFixedRate
илиscheduleWithFixedDelay
.Например, чтобы запустить метод
myTask
каждую секунду (Java 8):И в Java 7:
источник
TimeUnit.SECONDS.wait(1)
выбрасываетIllegalMonitorStateException
в Java 8.1 build 31 на Windows 6.3. Вместо этого я могу использоватьThread.sleep(1000)
без try / catch.Unhandled exception: java.lang.InterruptedExecution
дляsleep(1)
TimeUnit.SECONDS.sleep(1);
сtry catch
Использование
Thread.sleep(1000)
;1000
это количество миллисекунд, которые программа приостановит.источник
Вам нужно использовать
Thread.sleep()
звонок.Более подробная информация здесь: http://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html
источник
использовать это:
тогда вы можете вызвать этот метод в любом месте, как:
источник
Использование
TimeUnit.SECONDS.sleep(1);
илиThread.sleep(1000);
является приемлемым способом сделать это. В обоих случаях вы должны поймать,InterruptedException
что делает ваш код громоздким. Существует java-библиотека с открытым исходным кодом под названием MgntUtils (написанная мной), которая предоставляет утилиту, которая уже имеет дело сInterruptedException
внутренней частью . Итак, ваш код будет содержать только одну строку:Смотрите Javadoc здесь . Вы можете получить доступ к библиотеке из Maven Central или из Github . Статью с описанием библиотеки можно найти здесь
источник
catch (InterruptedException e) { /* empty */ }
здесь НЕ является разумным решением. По крайней мере, вы должны предоставить некоторую информацию журнала. Для получения дополнительной информации о предмете см. Javaspecialists.eu/archive/Issue056.htmlИспользование
Thread.sleep(100);
. Единица времени - миллисекундыНапример:
источник
Я знаю, что это очень старая запись, но она может кому-то помочь: вы можете создать метод, поэтому всякий раз, когда вам нужно сделать паузу, вы можете ввести
pause(1000)
или любое другое значение в миллисекундах:Это вставлено чуть выше
public static void main(String[] args)
, внутри класса. Затем, чтобы вызвать метод, введите,pause(ms)
но заменитеms
число миллисекунд для приостановки. Таким образом, вам не нужно вставлять весь оператор try-catch всякий раз, когда вы хотите сделать паузу.источник