0

私はそのようなタイマーをスケジュールする小さなルーチンを持っています:

timer.schedule(new myRoutine(), 1000, 60000);

aのrun()メソッドでmyRoutine、 aloggerが開かれ、 aFileHandlerがアタッチされます。

FileHandler fh = new FileHandler("app.log"),true);
logger.addHandler(fh);

アプリケーションには (サービスとして実行されるため) 実際の終了点がないため、's を閉じて削除する機会がないloggerためFileHandler、ファイル ロック ( app.log.lck) が残り、app.log.1次の開始時に新しいログファイル () が生成されます。サービス。

を確実にFileHandler閉じて削除する方法はありますか?

4

2 に答える 2

0

次のようにシャットダウンフックを追加できます。

タイマーをスケジュールするメソッド:

public void scheduleFileTask() {
    final FileHandler fh = new FileHandler("app.log"),true);
    Runtime.getRuntime().addShutdownHook(new Thread() {
        @Override
        public void run() {
            fh.close();
        }
    });
    timer.schedule(new MyRoutine(fh), 1000, 60000);
}

そしてMyRoutine.javaで

public class MyRoutine extends TimerTask {
    private final FileHandler handler;

    public MyRoutine(FileHandler hander) {
        this.handler = handler;
    }

    public void run() {
        // use handler here 
        handler.doSomething();
    }
}

詳細については、Java ドキュメントを参照してください。

于 2016-07-04T14:55:25.277 に答える