从代码中终止Swing应用程序的正确方法是什么,陷阱是什么?
我试图在定时器触发后自动关闭我的应用程序。但是仅仅在JFrame上调用dispose()并没有起到作用--窗口消失了,但是应用程序并没有终止。但是,当使用close按钮关闭窗口时,应用程序确实会终止。我该怎么办?
发布于 2008-11-03 17:01:37
您的JFrame默认关闭操作可以设置为"DISPOSE_ON_CLOSE“,而不是EXIT_ON_CLOSE (我无法理解为什么人们一直使用EXIT_ON_CLOSE )。
如果有任何未释放的窗口或非守护进程线程,应用程序将不会终止。这应该被认为是一个错误(用System.exit解决它是一个非常糟糕的想法)。
最常见的罪魁祸首是java.util.Timer和您创建的自定义线程。两者都应设置为守护程序或必须显式终止。
如果要检查所有活动帧,可以使用Frame.getFrames()。如果所有Windows/Frame都已释放,则使用调试器检查是否有任何仍在运行的非守护进程线程。
发布于 2008-11-03 08:21:25
我猜是EXIT_ON_CLOSE
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);在System.exit(0)之前更好,因为你可以在实际离开应用程序之前编写一个Window Listener来进行一些清理操作。
该窗口侦听器允许您定义:
public void windowClosing(WindowEvent e) {
displayMessage("WindowListener method called: windowClosing.");
//A pause so user can see the message before
//the window actually closes.
ActionListener task = new ActionListener() {
boolean alreadyDisposed = false;
public void actionPerformed(ActionEvent e) {
if (frame.isDisplayable()) {
alreadyDisposed = true;
frame.dispose();
}
}
};
Timer timer = new Timer(500, task); //fire every half second
timer.setInitialDelay(2000); //first delay 2 seconds
timer.setRepeats(false);
timer.start();
}
public void windowClosed(WindowEvent e) {
//This will only be seen on standard output.
displayMessage("WindowListener method called: windowClosed.");
}发布于 2008-11-03 08:04:32
尝试:
System.exit(0);很粗糙,但很有效。
https://stackoverflow.com/questions/258099
复制相似问题