Java в реальном времени - не удается запустить обработчик асинхронных событий

Следующий код адаптирован из примера в программировании на платформе 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 ответ

Несколько вещей, чтобы попробовать:

  1. Вызов fire() явно на экземпляре таймера, чтобы увидеть, если вы можете заставить вещи
  2. Попробуйте создать свой обработчик, передавая логику как Runnable объект к обработчику. API немного неясен в этом вопросе, но именно так я указывал обработчики в прошлом.

Пример:

AsyncEventHandler handler = new AsyncEventHandler(new Runnable() {
    public void run() {
      System.out.println("Stopping...");
      cont = false;                  
    }
  });
Другие вопросы по тегам