我有一个带有退出按钮的swing应用程序,它调用一个调用System.exit(0)的方法;但是由于某种原因,JVM没有关闭。有谁知道什么可能导致JVM继续运行?
答案 0 :(得分:5)
非守护程序线程不会阻止程序在您调用System.exit()
时终止(并且守护程序线程肯定不会)但是如果挂起†,则它们将无法终止。
†请参阅Design of the Shutdown Hooks API(最初链接的文章现在仅在the wayback machine提供)。
Swing可能使用关闭挂钩,但不会以阻止程序终止的方式使用。但是如果你(或你使用的某个库)调用Runtime.addShutdownHook()
,你最好确保你的关闭钩子没有死锁。
顺便说一下,解决这个问题的方法是添加一个关闭钩子,它会旋转另一个等待60秒的线程,然后调用Runtime.halt()
。 (你必须剥离另一个线程,否则关闭挂钩,等待60秒,将阻止程序终止60秒。)
答案 1 :(得分:2)
也许你有一个仍在运行的线程?
很容易找到正在运行的线程以及何时运行。在Netbeans中,以配置文件模式(Alt + F2)启动项目以实时创建快照。 (Profiler - > View - > Threads)