Java swing应用程序退出后JVM未关闭

Java swing应用程序退出后JVM未关闭,java,swing,jvm,Java,Swing,Jvm,我有一个带有退出按钮的swing应用程序,该按钮调用调用System.exit(0)的方法;但是JVM并没有因为某种原因而关闭。有人知道什么会导致JVM继续运行吗?也许您有一个线程仍在运行 很容易找到哪些线程正在运行以及何时运行。在Netbeans中,以概要文件模式(Alt+F2)启动项目以获得实时快照。(Profiler->View->Threads)调用System.exit()时,非守护进程线程不会阻止程序终止(守护进程线程当然不会),但如果它们无法终止,则关闭挂钩†将阻止程序终止 †请参

我有一个带有退出按钮的swing应用程序,该按钮调用调用System.exit(0)的方法;但是JVM并没有因为某种原因而关闭。有人知道什么会导致JVM继续运行吗?

也许您有一个线程仍在运行


很容易找到哪些线程正在运行以及何时运行。在Netbeans中,以概要文件模式(Alt+F2)启动项目以获得实时快照。(Profiler->View->Threads)

调用
System.exit()时,非守护进程线程不会阻止程序终止(守护进程线程当然不会),但如果它们无法终止,则关闭挂钩†将阻止程序终止

†请参阅(最初链接的文章现在仅在上提供)

Swing可能使用关机挂钩,但不会阻止程序终止。但如果您(或您使用的某个库)调用,最好确保您的关闭挂钩不会死锁


顺便说一句,解决这个问题的一个方法是添加一个关闭钩子,该钩子派生另一个等待60秒的线程,然后调用。(您必须剥离另一个线程,否则关机钩子会等待60秒,从而阻止程序终止60秒。)

退出时是否有任何非守护进程线程在运行?您还可以使用JVisualVM或其前身JConsole,这两种线程都随Sun的JVM提供。特别是JConsole在Threads选项卡的底部有一个方便的“Detect Deadlock”按钮,我不知道这个“Detect Deadlock”按钮。有时可能有用!谢谢