如果我有一個Java程序,可以退出因各種原因,如:查找,從ShutdownHook,爲什麼一個程序退出
因爲主窗口中,它被設置在接近「退出」,被關閉
,因爲有一些System.exit(0)代碼
因爲有根本沒有更多的窗口(並沒有被設置爲關閉退出上),但仍然有幾個線程然後在一個點運行,只有守護線程正在運行,因此該程序退出。
而且我已經安裝了關機掛鉤(它運行正常)。
有沒有什麼辦法可以從我的shutdown hook中知道是什麼導致Java程序退出?
(請注意,我不問,如果它是一個好主意或不具有System.exit(...)
遍佈代碼庫:這是不是這個問題是關於什麼的)
基本上我想知道我強迫自己攔截每一個可能的JVM退出點,並在那裏添加信息,或者如果已經有一種方法允許這樣做。
你是什麼意思*「你可以保存這個以後要求的地方......」* * SecurityManager *會讓我得到確切的類/行,例如,一個* System.exit *打電話了? –
您可以使用Thread.currentThread()。getStackTrace()獲取堆棧跟蹤。 SecurityManager在執行安全敏感操作時被調用(否則它只是一個類/對象) –
在安全管理器內部,可以構造一個'Throwable',然後使用'printStackTrace()'或'getStackTrace ()'。 –