2
下面的代碼是改編自一個例子,實時Java平臺編程由Peter C.穴播:實時爪哇 - 異步事件處理程序不火
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......
顯然,處理不火,而我不知道爲什麼。另一個涉及週期性定時器觸發處理程序的示例程序確實按預期工作。程序結構與此處的程序結構幾乎相同。
是你真正的代碼?看起來你缺少一個參數(一個Clock)給你的Timer構造函數。 (還有與真實代碼有什麼不同嗎?)另外,你在使用什麼虛擬機? – andersoj
哎呀,從頭開始,有一個'無時鐘'的構造函數 – andersoj
你是否嘗試過從主線程(我知道你不應該)在計時器上調用'fire()'。 – andersoj