我想要在java中運行關機鉤子。這個鉤子的目的是寫入程序終止的日誌文件。 Java應用程序被編譯成一個jar文件,並使用批處理文件執行,這意味着應用程序的輸出將轉到cmd.exe窗口。當此cmd窗口關閉時,我希望應用程序記錄它已關閉。在java中運行關機鉤子
該應用程序旨在無限期運行並在特定時間執行某些任務。因此,程序正在「While true」循環內執行一系列檢查。我不明白爲什麼這個鉤子不會記錄應用程序正在關閉!
在main方法有:
final Thread mainThread = Thread.currentThread();
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable()
{
@Override
public void run()
{
try { mainThread.join(); }
catch (InterruptedException e) { }
mission.log("Program Closed.", true);
}
}
));
所有「使命」是,是一個自定義類礦山,做數據記錄的一個實例。當你調用方法「log」時,它有一個BufferedWriter,它調用它的.write(),.newLine()和.flush()方法。
當我殺死批處理窗口時,我似乎無法得到我的日誌文件中的「程序關閉」行。我究竟做錯了什麼?
殺死批處理窗口會殺死進程,但並不會正常停止它。 –
然後,是否根本沒有辦法檢測到批處理文件關閉,並將其輸入日誌?你似乎告訴我,這根本不可能。 – Drifter64
我不認爲有一種方法可以檢測進程中是否有進程被殺死。 –