爪哇力量关闭程序
如何在程序退出时以编程方式强制关闭程序。 我已经添加了关闭挂钩,它调用System.exit(0)
,但它似乎有执行该问题的问题。即使Jframe已关闭并执行了关闭挂钩,javaw.exe
进程仍会在内存中运行。爪哇力量关闭程序
此外,当我手动关闭运行该程序的批处理文件时,Windows将引发强制关闭消息。 image:http://i.imgur.com/gy57OEV.png
在关机挂钩中调用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()
关闭挂钩正在运行该方法将无限期地阻塞。“
所以,这足以引起钩到b无限期地锁定。这将导致关机顺序停止。
System.exit()
正常工作在JOptionPane
场景:
Object[] options={"YES","NO"};
int selection= JOptionPane.showOptionDialog(this, "Message input", "Title",
JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null, options,
options[1]);
if(selection==JOptionPane.YES_OPTION){
reset();
}
else if(selection==JOptionPane.NO_OPTION){
System.exit(0);
}
但是,上述f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
的规定仍然存在于我的主要方法
使用堆栈跟踪 –
有似乎没有叫任何例外添加例外..它只是不关闭。 另外,当我手动关闭批处理文件时,Windows提供强制关闭消息。 – Chris