Будильник на Яве - PullRequest
       41

Будильник на Яве

3 голосов
/ 15 сентября 2011

Я хочу создать программу, которая будет отображать всплывающее окно в определенное время в будущем, например.5:00 сегодня вечером.По сути, программа представляет собой систему напоминаний / уведомлений о встречах, собраниях и т. Д.

Моим первым инстинктом было создание своего рода «Clock Listener», который проверял бы время компьютера каждую минуту или около того и проверял бы currentTime== alarmTime.Однако я не знаю, требует ли это слишком много ресурсов или это просто плохая практика, когда ваша программа постоянно делает подобные вещи.Кроме того, для того, чтобы будильник был точным, я думаю, что нужно проверять каждую секунду, а не каждую минуту (поскольку, если он не проверяет секунды и сработает в 5: 00: xx, он может сработать в 5: 00: 59, что может быть слишком поздно для некоторых людей).Слишком много проверяет часы каждую секунду?

Моя вторая мысль состояла в том, что когда программа запускается, подсчитайте, сколько времени пройдет, пока не сработает будильник (скажем, через пять часов).Затем подождите пять часов, а затем подайте сигнал тревоги.Но потом я подумал, что маловероятно, что пользователь сможет изменить время компьютера, и тогда сигнал тревоги сработает в неподходящее время.Так что это на самом деле не работает.

Я видел некоторые решения, использующие потоки, но я пока не знаком с ними, поэтому я бы не стал их использовать.

IЯ склоняюсь к первому решению, но я хочу убедиться, что оно эффективно и не будет тормозить другие программы.Возможно, я обдумываю это, и проверка часов - тривиальная операция, но я просто хотел убедиться, что я не делаю ничего плохого.

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Решение для сна очень простое, но использование java.util.Timer не намного сложнее и дает вам четкий способ расширить вашу утилиту для нескольких сигналов тревоги и т. Д. Предполагается, что вы собираетесь использовать Swing отобразите уведомление, обратите внимание, что вашему TimerTask потребуется выполнить некоторые из его работ в потоке событий Swing. SwingUtilities.invokeAndWait(...) поможет вам в этом.

0 голосов
/ 15 сентября 2011

Первое решение в порядке.Просыпаться, проверять время и возвращаться ко сну не должно быть проблемой вообще.Вы можете проверять каждую секунду, если хотите, но если вам нужно только 1-минутное разрешение, возможно, этого достаточно, например, каждые 30 секунд.

Второй подход имеет проблему, которую вы уже обрисовали.Если вы просто ложитесь спать на оставшееся время, а пользователь меняет время (или время изменяется каким-либо другим способом, например синхронизацией с сервером времени), сигнал тревоги сработает не в то время.Этого можно было бы избежать, если бы вы могли зарегистрировать некоторый тип хуков, чтобы ваша программа вызывалась обратно при изменении системного времени, но вы не можете легко сделать это в Java.

...