我已經搜索了網絡,並且一直未能找到結果。我正在尋找一個Listener,當一個jar崩潰/停止時,它就會被調用。我知道他們是這樣的JFrame,但我沒有使用框架。 謝謝,艾利。Java應用程序停止或崩潰時的監聽器
回答
查找到java.lang.Runtime中,方法
void addShutdownHook(Thread hook)
從它的javadoc只有一句話(但一定要閱讀所有的小字有):當虛擬機開始關閉序列,它將以某種未指定的順序啓動所有已註冊的關閉掛鉤,並讓它們同時運行。
這裏是一個 「撞車」 的堆棧溢出引起:
static void rec(){ rec(); }
public static void main(String[] args){
Thread thread = new Thread(){
public void run(){
System.out.println("SHUTDOWN");
}
};
Runtime.getRuntime().addShutdownHook(thread);
rec();
}
和它打印關機。
這是一個應用程序uing相同關閉掛鉤作爲睡覺,可以使用Ctrl-C或爲BG工作在Linux風格kill %1
被殺害之前:
Runtime.getRuntime().addShutdownHook(thread);
try {
System.out.println("Sleeping");
Thread.sleep(5000);
System.out.println("Waking");
} catch(Exception e){
}
和它打印關機。
最後,這裏的挑釁java.lang.OutOfMemoryError: Java heap space
List<Object> objs = new ArrayList<>();
while(true){
objs.add(new byte[0x10000000]);
}
和它打印關機。 (對於堆空間的大量抓取,關閉鉤子甚至可以創建一些新的對象,但是應該這樣寫,以便線程已經將所有需要的對象包含在其預先分配的內存中)。
如果您的應用程序崩潰或使用kill命令停止,它將無法工作。 – Stanislav
@Stanislav添加了一些演示。不知道你的意思是「崩潰」或「停止」。很明顯,如果JVM本身被內存耗盡,關閉掛鉤將不會執行,但不會執行任何操作。 – laune
我的意思是,你可以用完內存或者進程被SIGKILL信號終止。在這種情況下,shutdownhook不會被調用。此外,必須小心使用shutdownhook,只需看一看javadoc,看看它是否有一些特定的行爲,例如直到最後才能執行,如果需要很長時間,因爲JVM沒有等待爲它完成。我只是假設,如果你給這個解決方案,你必須提供關於這種特定行爲的信息。 – Stanislav
- 1. Android應用程序崩潰時使用按鈕OnClick監聽器
- 2. NSZombieEnabled停止應用程序崩潰
- 3. 由於點擊監聽器而導致應用程序崩潰?
- 4. Android,應用程序崩潰,ListView監聽器
- 5. 動畫監聽器崩潰應用程序
- 6. C應用程序使用GetOpenFileName崩潰。 DEP停止崩潰
- 7. TCP監聽器停止監聽
- 8. 添加onclick監聽器按鈕停止應用程序工作
- 9. 語音搜索/ SpeechRecognizer崩潰的快速啓動/停止監聽
- 10. Socket在應用程序崩潰後仍在監聽
- 11. Java應用程序崩潰
- 12. Java應用程序崩潰
- 13. 啓動時應用程序崩潰「不幸,已停止」
- 14. Android - 應用程序在停止MediaPlayer onPause時崩潰
- 15. 停止TCP監聽器
- 16. OnBackStackChange監聽器中的應用程序崩潰(無法獲取片段)
- 17. 我的應用程序崩潰。不幸的是,應用程序已停止
- 18. Android事件監聽器的初始化崩潰應用
- 19. 應用程序崩潰。不幸的是,應用程序已停止工作
- 20. 當使用聽寫時,基於WKWebView的應用程序崩潰
- 21. 我的應用程序不斷崩潰,說「已停止」由:java.lang.NullPointerException
- 22. QT 5沒有監視器的應用程序崩潰
- 23. 監視程序崩潰
- 24. 應用程序退出時停止監視器服務
- 25. 崩潰後終止應用程序
- 26. 防止應用程序崩潰
- 27. 停止傳感器監聽器服務
- 28. 停止監聽node.js的
- 29. MediaPlayer停止按鈕崩潰應用程序
- 30. Android YoutubePlayer以「java.lang.NoClassDefFoundError:us」停止並且應用程序崩潰
編輯標題: 「jar」不是描述它的最好的詞,希望對你有好處。 – laune