我有一个带有退出按钮的swing应用程序,它调用一个调用System.exit(0)的方法; 但是由于某种原因,JVM没有关闭.有谁知道什么可能导致JVM继续运行?
非守护程序线程不会阻止程序在您调用时终止System.exit()(并且守护程序线程肯定不会),但如果它们无法终止,则会关闭挂钩†.
†请参阅Shutdown Hooks API的设计(最初链接的文章现在仅在返回机器上可用).
Swing可能使用关闭挂钩,但不会以阻止程序终止的方式使用.但是,如果您(或您使用的某些库)调用Runtime.addShutdownHook(),您最好确保关闭挂钩不会死锁.
顺便说一下,解决这个问题的一个方法是添加一个关闭钩子,它会旋转另一个等待60秒的线程,然后调用Runtime.halt().(你必须剥离另一个线程,否则关闭挂钩,等待60秒,将阻止程序终止60秒.)
| 归档时间: |
|
| 查看次数: |
2157 次 |
| 最近记录: |