我有一个闹钟会在特定时间播放声音。我正在寻找一种方法来阻止它运行,我该怎么办?
这是我的闹钟代码:
waiter = new Thread(new Runnable() {
public void run() {
while (Thread.currentThread() == waiter) {
Calendar d = Calendar.getInstance();
if (getAlarmHours() == d.get(Calendar.HOUR_OF_DAY)) {
if (getAlarmMinutes() == d.get(Calendar.MINUTE)) {
UserInterface
.setAlarmText("no alarms");
playSound.play();
isSoundPlaying = true;
break;
}
}
}
}
});
我想再次使用闹钟,任何关于我可能出错的建议都会受到赞赏。如果我使用wait()
,如何在不收到异常的情况下通知?
答案 0 :(得分:0)
waiter.interrupt();
另外,在你的while循环中,也许放一个Thread.sleep(100);
答案 1 :(得分:0)
我写了一些应该有用的虚构代码。 code 你可以修改解决方案,看起来像你的程序,如果这是你想要的
答案 2 :(得分:0)
考虑将代码从while循环移动到某种形式的Timer。
一些常见的建议是Timer类构建到JVM或Quartz这是来自Terracotta的第三方库。
有关使用标准JVM选项的警报问题的示例
Timer timer = new Timer();
//Start the alarm now, change the date object to your specific time
timer.schedule(new AlarmTimerTask(), new Date(System.currentTimeMillis()));
你的AlarmTimerTask类将是
public class AlarmTimerTask extends TimerTask {
public void run(){
//Do something
}
}
如果您想要删除计时器(关闭它或应用程序正在关闭),请拨打timer.cancel()
以删除任务。
Quartz将为您提供额外的功能和一个很好的库来学习
编辑:我应该指出,如果你将AlarmTimerTask类分配给它自己的变量而不是在schedule()方法中初始化它,你也可以在单个任务上调用cancel(),而不仅仅是Timer < / p>