Java中的闹钟
Posted
技术标签:
【中文标题】Java中的闹钟【英文标题】:Alarm clock in Java 【发布时间】:2011-09-15 16:22:36 【问题描述】:我想制作一个程序,它会在未来的某个时间出现一个弹出窗口,例如。今晚5:00。基本上,该程序是约会、会议等的提醒/通知系统。
我的第一个直觉是创建一种“时钟监听器”,它会每分钟左右检查一次计算机的时间,看看 currentTime == alarmTime。但是,我不知道这是否占用了太多资源,或者让您的程序不断地做这样的事情是否只是一种不好的做法。另外,为了让闹钟准确,我认为它需要每秒检查一次,而不是每分钟检查一次(因为如果它不检查秒数并且会在 5:00:xx 响起,它可能会在 5 点响起:00:59,对于某些人来说可能为时已晚)。每秒检查时钟是否太多了?
我的第二个想法是当程序开始运行时,计算警报设置为响起的时间(例如,五小时后)。然后,等待五个小时,然后响起警报。但后来我想,虽然不太可能,但用户有可能更改计算机的时间,然后警报会在错误的时间响起。所以这真的行不通。
我见过一些使用线程的解决方案,但我还不熟悉,所以我宁愿不使用它们。
我倾向于第一个解决方案,但我想确保它高效且不会减慢其他程序的速度。可能是我想多了,看表是小菜一碟,但我只是想确保自己没有做错什么。
【问题讨论】:
我理解这个想法,这将是一个桌面应用程序吗?如果是,您是否只想为某些特定操作系统开发它? 是的,我希望它是一个适用于 Windows 的程序,在后台运行,然后只在闹钟设置为响起时弹出窗口。 选择第一个。对于在 GigaHertz 中工作的计算机来说,每秒检查一次时间是微不足道的。 【参考方案1】:睡眠解决方案非常简单,但使用java.util.Timer
并不难,并且为您提供了一种清晰的方式来扩展您的实用程序以用于多个警报等。假设您将使用 Swing 来显示通知,请注意您的TimerTask
将需要在 Swing 事件线程上执行一些工作。 SwingUtilities.invokeAndWait(...)
会帮助你。
【讨论】:
【参考方案2】:第一个解决方案是可以的。起床、查看时间、再入睡根本不成问题。如果你愿意,你可以每秒检查一次,但如果你只需要 1 分钟的分辨率,也许检查一下就足够了。每 30 秒一次。
第二种方法存在您已经概述的问题。如果您只是在剩余的时间内睡觉,而用户更改了时间(或通过其他方式更改时间,例如与时间服务器同步),则警报将在错误的时间响起。如果您可以注册某种钩子以便在系统时间更改时回调您的程序,则可以避免这种情况,但您不能在 Java 中轻松做到这一点。
【讨论】:
以上是关于Java中的闹钟的主要内容,如果未能解决你的问题,请参考以下文章
通过背景中的android AlarmClock 类设置闹钟