Java中的闹钟

时间:2011-09-15 16:22:37

标签: java timer clock alarm

我想制作一个程序,以便在将来的某个时间出现弹出窗口,例如。今晚5点。基本上,该计划是约会,会议等的提醒/通知系统。

我的第一直觉是创建一种“时钟监听器”,它会每分钟检查计算机的时间,并查看currentTime == alarmTime。但是,我不知道这是否会占用太多资源,或者让你的程序不断地做这样的事情只是一个坏习惯。此外,为了使报警准确,我认为它需要检查每一秒,而不是每一分钟(因为如果它没有检查秒,并将在5:00:xx,它可能会在5 :00:59,对某些人来说可能为时已晚。)每秒检查时钟太多了吗?

我的第二个想法是当程序开始运行时,计算警报设置为关闭之前的持续时间(例如,在五个小时内)。然后,等待五个小时,然后发出警报。但后来我想,尽管不太可能,用户可能会改变计算机的时间,然后警报会在错误的时间响起。所以这不起作用。

我见过一些使用线程的解决方案,但我还不熟悉那些,所以我宁愿不使用它们。

我倾向于第一个解决方案,但我想确保它的效率并且不会减慢其他程序的速度。也许我正在过度思考它并检查时钟是一项微不足道的操作,但我只是想确保我没有做错任何事。

2 个答案:

答案 0 :(得分:1)

睡眠解决方案非常简单,但使用java.util.Timer并不困难,并为您提供了一种明确的方法来扩展多个警报的实用程序等。假设您要使用Swing来显示通知,请注意,您的TimerTask需要在Swing事件线程上执行某些工作。 SwingUtilities.invokeAndWait(...)会帮助您。

答案 1 :(得分:0)

第一种解决方案是好的。醒来,检查时间,然后回去睡觉应该不是问题。您可以根据需要每秒检查一次,但如果您只需要1分钟的分辨率,则可以检查例如每30秒一次。

第二种方法存在您已经概述的问题。如果您只是在剩余时间内进入睡眠状态,并且用户更改时间(或通过其他方式更改时间,例如与时间服务器同步),则警报将在错误的时间发生。你可以避免这种情况,如果你可以注册某种钩子,以便在系统时间改变时回调你的程序,但你不能用Java轻松地做到这一点。