FileHandler
スレッドが終了または強制的に終了したら、すべての s を閉じたいです。
関数を作成しました
が、ファイルがまだフォルダー内でロックされているため、closeLogger
呼び出されていないようです。
- 何が問題ですか?
- eclipseで強制的に実行を終了させた場合も対応できますか?
私のコードは次のとおりです。
public class Passenger extends Thread {
private Logger logger;
public Passenger() throws SecurityException, IOException, InterruptedException {
logger = Logger.getLogger(String.format("Passenger%sLogger", name));
FileHandler fileHandler = new FileHandler(String.format(".\\Logs\\PassengerLogs\\passenger_%s.txt", name), true);
fileHandler.setFormatter(new LogFormatter());
logger.addHandler(fileHandler);
}
@Override
public void run() {
try {
goToStation();
waitForTaxi();
if (passengerState == PassengerState.WatingInQueue) {
goHome();
} else { // already in taxi
synchronized (this) {
wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
closeLogger();
}
}
private void closeLogger() {
Logger logger = getLogger();
java.util.logging.Handler[] handlers = logger.getHandlers();
for (java.util.logging.Handler h : handlers) {
try {
h.close();
} catch (SecurityException e) {}
}
}
}