如果我有一个Java程序,它可能因为以下各种原因退出:
因为设置为“关闭即退出”的主窗口已关闭;
因为代码中有一些System.exit(0);
因为没有窗口了(也没有设置为“关闭即退出”的窗口),但仍有几个线程在运行,然后在某个时刻只有守护线程在运行,因此程序退出。
而且我已经安装了一个关机钩子(运行良好)。
从我的关机钩子中,有没有办法知道是什么原因导致Java程序退出?
(请注意,我不是在问在代码库中分散使用System.exit(...)是否是一个好主意,这不是这个问题的内容)
基本上,我想知道是否必须拦截每个可能的JVM退出点并在那里添加信息,还是已经有一种方法可以做到这一点。
因为设置为“关闭即退出”的主窗口已关闭;
因为代码中有一些System.exit(0);
因为没有窗口了(也没有设置为“关闭即退出”的窗口),但仍有几个线程在运行,然后在某个时刻只有守护线程在运行,因此程序退出。
而且我已经安装了一个关机钩子(运行良好)。
从我的关机钩子中,有没有办法知道是什么原因导致Java程序退出?
(请注意,我不是在问在代码库中分散使用System.exit(...)是否是一个好主意,这不是这个问题的内容)
基本上,我想知道是否必须拦截每个可能的JVM退出点并在那里添加信息,还是已经有一种方法可以做到这一点。
Throwable
,然后使用printStackTrace()
或getStackTrace()
从中检索堆栈跟踪。 - John Haager