如何在没有例外情况下中断此警报?

时间:2011-07-22 16:42:53

标签: java multithreading timer alarm

我有一个闹钟会在特定时间播放声音。我正在寻找一种方法来阻止它运行,我该怎么办?

这是我的闹钟代码:

        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(),如何在不收到异常的情况下通知?

3 个答案:

答案 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>