我正在尝试让一个关闭挂钩在 java 中运行。这个钩子的目的是写入一个程序被终止的日志文件。Java 应用程序被编译成 jar 文件并使用批处理文件执行,这意味着应用程序的输出将转到 cmd.exe 窗口。当此 cmd 窗口关闭时,我希望应用程序记录它已关闭。
该应用程序旨在无限期地运行并在特定时间执行特定任务。因此,程序在“While true”循环中执行一系列检查。我不明白为什么这个钩子不会记录应用程序正在关闭!
在主要方法中,我们有:
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() 方法。
当我杀死批处理窗口时,我似乎无法在我的日志文件中获得“程序关闭”行。我究竟做错了什么?