【发布时间】:2014-01-29 16:00:58
【问题描述】:
我正在尝试让一个关闭挂钩在 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() 方法。
当我杀死批处理窗口时,我似乎无法在我的日志文件中获得“程序关闭”行。我做错了什么?
【问题讨论】:
-
杀死批处理窗口会杀死进程,它不会优雅地停止它。
-
那么,有没有办法检测到批处理文件关闭,并在日志中输入呢?你似乎在告诉我这根本不可能。
-
我认为没有办法检测进程是否从进程中被杀死。
标签: java batch-file logging cmd shutdown-hook