2012-07-24 41 views
3

我正在寻找Java中监视计算机时钟(分钟)并在每次更改时启动方法/线程的最佳方法。Java事件监听器在时钟上分钟更改

所以如果时间是13:20,它会变成13.21然后做点什么。所以任何时候有一点点改变,一些代码就会被解雇。

什么是最好的方式来听更改时钟的分钟部分?

感谢, 理查德

回答

1

Date d = new Date(System.currentTimeMillis());

然后你就可以通过d.getMinutes()拿到分钟。在等待d.getMinutes()的值更改的线程中运行检查。

+0

这涉及到很多的忙等待。 – Charlie 2013-08-19 18:47:57

+0

@Charlie,这取决于你想要的精度。只需在检查周期中使用[wait(long)](http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait(long))。 – dant3 2013-09-26 22:37:05

+0

仍在忙着等待。时钟将在-checkCycle和+ checkCycle之间关闭。 – Charlie 2013-10-02 18:06:44

2

听起来像是Quartz工作。您可以使用下面的cron表达式做到这一点:

0 * * * * ?

6
  1. 查找使用System.currentTimeMillis的()
  2. 计算当前系统时间多少毫秒,直到下一分钟
  3. 安排一个TimerTask上的定时器在数毫秒的未来
  4. 运行

    在该TimerTask的事件处理程序计划一个新的重复发生的TimerTask运行每60,000毫秒。

    int milisInAMinute = 60000; 
    long time = System.currentTimeMillis(); 
    
    Runnable update = new Runnable() { 
        public void run() { 
         // Do whatever you want to do when the minute changes 
        } 
    }; 
    
    Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 
        public void run() { 
         update.run(); 
        } 
    }, time % milisInAMinute, milisInAMinute); 
    
    // This will update for the current minute, it will be updated again in at most one minute. 
    update.run();