Observerパターンでシンプルなタイマーを実装しました。メイン関数実行中に5分経過したら終了させたいと思っていました。基本的に必要なのは、単純なワンショット タイムアウト機能です。どうすればこれを達成できますか?コードが機能しません。以下はタイマークラスです
public class OneShotTimer extends Observable implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(30);
} catch (Exception e) {
// TODO: handle exception
System.out.println("Exception in timer");
}
notifyObservers();
}
メイン クラスのコンストラクターで、そのタイマーを初期化します。
public GreenOverlayMain(){
timer = new OneShotTimer();
timer.addObserver(this);
Thread t = new Thread(timer, "mythread");
t.start();
}
ただし、タイムアウトが発生しないため、メイン クラスの update() 関数は実行されません。MainClass は Observer インターフェイスを実装します。以下は更新機能です。
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
System.gc();
System.exit(0);
}