实时java - 异步事件处理程序无法触发

时间:2011-08-01 07:35:14

标签: real-time-java

以下代码改编自Peter C. Dibble的实时Java平台编程中的示例:

import javax.realtime.*;
public class OSTimer {

  static volatile boolean cont = true;

  public static void main(String[] args) {
    AsyncEventHandler handler = new AsyncEventHandler(){
        public void handleAsyncEvent() {
          System.out.println("Stopping...");
          cont = false;                  
        }
      }
    };

   OneShotTimer timer = new OneShotTimer(new RelativeTime(3000, 0), handler);
   timer.start();

   while(cont){
     System.out.println("Running");
     if (timer.isRunning()) System.out.println("Timer is running");
     try {
       Thread.sleep(1000);
     } catch(Exception e) { }
   }
   System.exit(0);
}

该程序应该运行3秒然后退出。但是,输出显示虽然计时器确实在3秒后停止,但程序仍然照常继续,即输出为:

Running
Timer is running
Running
Timer is running
Running
Timer is running
Running
Running
Running......
显然处理程序没有触发,我不知道为什么。涉及触发处理程序的周期性计时器的另一个示例程序确实按预期工作。程序结构几乎与此处的结构相同。

1 个答案:

答案 0 :(得分:1)

要尝试的一些事项:

  1. 在计时器实例上明确调用fire()以查看是否可以强制执行
  2. 尝试通过将逻辑作为Runnable对象传递给处理程序来创建处理程序。 API有点不清楚,但这是我过去指定处理程序的方式。
  3. 示例:

    AsyncEventHandler handler = new AsyncEventHandler(new Runnable() {
        public void run() {
          System.out.println("Stopping...");
          cont = false;                  
        }
      });