Я пытался отложить (или уложить в сон) мою Java-программу, но произошла ошибка.
Я не могу использовать Thread.sleep(x)
или wait()
. Появляется то же сообщение об ошибке:
незарегистрированное исключение java.lang.InterruptedException; должен быть пойман или объявлен брошенным.
Требуется ли какой-либо шаг перед использованием методов Thread.sleep()
или wait()
?
Ответы:
У вас впереди много чтения. От ошибок компилятора до обработки исключений, потоков и прерываний потоков. Но это будет делать то, что вы хотите:
источник
Как говорили другие пользователи, вы должны окружить свой вызов
try{...} catch{...}
блоком. Но так как Java 1.5 была выпущена, есть класс TimeUnit, который делает то же самое, что Thread.sleep (миллис), но более удобный. Вы можете выбрать единицу времени для режима сна.Также у него есть дополнительные методы: TimeUnit Oracle Documentation
источник
try-catch
обработкой исключений.Посмотрите на этот отличный краткий пост о том, как сделать это правильно.
По сути: лови
InterruptedException
. Помните, что вы должны добавить этот блок catch. Пост объясняет это немного дальше.источник
Используйте следующую конструкцию кодирования для обработки исключений
источник
Поместите свой
Thread.sleep
блок в попытку пойматьисточник
При использовании Android (единственный раз, когда я использую Java), я бы рекомендовал использовать обработчик вместо того, чтобы перевести поток в спящий режим.
Ссылка: http://developer.android.com/reference/android/os/Handler.html
источник
Попробуй это:
источник
Exception
на Java?Мои способы добавить задержку в программу Java.
Это для последовательной задержки, но для петлевых задержек обратитесь к Java Delay / Wait .
источник
например:-
источник
Более простым способом ожидания является использование
System.currentTimeMillis()
, которое возвращает количество миллисекунд с полуночи 1 января 1970 года по Гринвичу. Например, подождать 5 секунд:Таким образом, вам не нужно копаться с потоками и исключениями. Надеюсь это поможет!
источник
Используйте
java.util.concurrent.TimeUnit
:Спи одну секунду или
Спи минуту.
Поскольку это цикл, это представляет собой внутреннюю проблему - дрейф. Каждый раз, когда вы запускаете код, а затем засыпаете, вы будете немного отвлекаться, скажем, каждую секунду. Если это проблема, не используйте
sleep
.Кроме того,
sleep
не очень гибкий, когда дело доходит до контроля.Для запуска задачи каждую секунду или с задержкой в одну секунду я настоятельно рекомендую [
ScheduledExecutorService
] [1] и либо [scheduleAtFixedRate
] [2] или [scheduleWithFixedDelay
] [3].Чтобы запустить метод
myTask
каждую секунду (Java 8):источник
Thread.sleep()
прост для начинающих и может подойти для модульных тестов и проверки концепции.Но, пожалуйста, НЕ используйте
sleep()
для производственного кода. В конце концовsleep()
может сильно укусить вас.Для многопоточных / многоядерных Java-приложений рекомендуется использовать концепцию «ожидание потока». Wait освобождает все блокировки и мониторы, удерживаемые потоком, что позволяет другим потокам получать эти мониторы и продолжать работу, пока ваш поток мирно спит.
Код ниже демонстрирует эту технику:
DelayUtil
реализация:источник
В качестве альтернативы, если вы не хотите иметь дело с потоками, попробуйте этот метод:
Он начинается, когда вы звоните, и заканчивается, когда прошло количество секунд.
источник