Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的闹钟_Java_Timer_Clock_Alarm - Fatal编程技术网

Java中的闹钟

Java中的闹钟,java,timer,clock,alarm,Java,Timer,Clock,Alarm,我想制作一个程序,在将来的某个时间,例如今晚5点,弹出一个窗口。基本上,该计划是一个约会、会议等的提醒/通知系统 我的第一反应是创建一种“时钟监听器”,每分钟左右检查一次计算机的时间,看看currentTime==alarmTime。然而,我不知道这是否占用了太多的资源,或者让你的程序不断地做这样的事情是一种不好的做法。此外,为了让闹钟准确,我认为它需要每秒钟检查一次,而不是每分钟检查一次(因为如果它不检查秒数,并且会在5:00:xx响,它可能会在5:00:59响,这对某些人来说可能太晚了)。每

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

我的第一反应是创建一种“时钟监听器”,每分钟左右检查一次计算机的时间,看看currentTime==alarmTime。然而,我不知道这是否占用了太多的资源,或者让你的程序不断地做这样的事情是一种不好的做法。此外,为了让闹钟准确,我认为它需要每秒钟检查一次,而不是每分钟检查一次(因为如果它不检查秒数,并且会在5:00:xx响,它可能会在5:00:59响,这对某些人来说可能太晚了)。每秒钟看一次钟是不是太多了

我的第二个想法是,当程序开始运行时,计算闹钟设置为关闭的时间(比如,五小时后)。然后,等五个小时,然后鸣响警报。但后来我想,虽然不太可能,但用户有可能改变电脑的时间,然后闹钟会在错误的时间响。所以这真的不起作用

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


我倾向于第一种解决方案,但我想确保它是有效的,不会减慢其他程序。也许我想得太多了,检查时钟是一个很简单的操作,但我只是想确保我没有做错任何事情。

第一个解决方案是可以的。醒来,检查时间,然后再睡觉应该不是什么问题。如果需要,您可以每秒钟检查一次,但是如果您只需要1分钟的分辨率,那么每30秒检查一次就足够了


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

睡眠解决方案非常简单,但使用起来并不难,它为您扩展多个警报的实用程序提供了一种清晰的方法,等等。假设要使用Swing显示通知,请注意,
TimerTask
将需要在Swing事件线程上执行一些工作。这将帮助您。

我理解这个想法,这将是一个桌面应用程序吗?如果是的话,你想只为某个特定的操作系统开发它吗?是的,我希望它是一个在后台运行的Windows程序,然后只有在闹钟响起时才会弹出窗口。使用第一个。对于工作在千兆赫兹的计算机来说,每秒检查一次时间是微不足道的。