如果我有一个Java程序,可以退出因各种原因,如:查找,从ShutdownHook,为什么一个程序退出
因为主窗口中,它被设置在接近“退出”,被关闭
,因为有一些System.exit(0)代码
因为有根本没有更多的窗口(并没有被设置为关闭退出上),但仍然有几个线程然后在一个点运行,只有守护线程正在运行,因此该程序退出。
而且我已经安装了关机挂钩(它运行正常)。
有没有什么办法可以从我的shutdown hook中知道是什么导致Java程序退出?
(请注意,我不问,如果它是一个好主意或不具有System.exit(...)
遍布代码库:这是不是这个问题是关于什么的)
基本上我想知道我强迫自己拦截每一个可能的JVM退出点,并在那里添加信息,或者如果已经有一种方法允许这样做。
你是什么意思*“你可以保存这个以后要求的地方......”* * SecurityManager *会让我得到确切的类/行,例如,一个* System.exit *打电话了? –
您可以使用Thread.currentThread()。getStackTrace()获取堆栈跟踪。 SecurityManager在执行安全敏感操作时被调用(否则它只是一个类/对象) –
在安全管理器内部,可以构造一个'Throwable',然后使用'printStackTrace()'或'getStackTrace ()'。 –