Java Force Close Program

Chr*_*ris 1 java shutdown awt shutdown-hook

如何在退出时以编程方式强制关闭程序.我已经添加了一个调用a的关闭钩子,System.exit(0)但它似乎在执行时遇到了问题.javaw.exe即使Jframe已关闭且执行了关闭挂钩,该进程仍在内存中运行.

此外,当我手动关闭运行该程序的批处理文件时,Windows会抛出强制关闭消息.图片:http://i.imgur.com/gy57OEV.png

Ste*_*n C 8

调用System.exit()关闭钩子是没有意义的.在调用钩子之前,JVM已经决定关闭.我想System.exit()从关机钩子调用可能会有问题......

据推测,您的应用程序未关闭的原因是您的应用程序已创建其他线程,并且它们仍处于活动状态.

处理此问题的一种方法是让JFrame关闭事件(或关闭按钮)触发启动JVM关闭的内容.您的f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)代码是一种方法.它将调用System.exit ...并且当JVM关闭时,它将运行任何关闭挂钩.

另一种方法是将其他线程标记为"守护程序"线程,这意味着它们不会阻止JVM决定关闭.(通常情况下,如果没有实时非守护程序线程,JVM会拔出插件.对于单线程应用程序,这意味着你的"主"线程...)


感兴趣的是,这就是为什么System.exit()调用在关闭钩子中是有问题的.

javadoc说System.exit()相当于System.getRuntime().exit(),后者的javadoc说:

" 如果在虚拟机开始关闭序列后调用此方法,那么如果正在运行关闭挂钩,则此方法将无限期地阻塞. "

因此,如果System.exit() 关闭钩子调用,这足以导致钩子无限期地阻塞.这将导致关机序列停止.