我有一个JDialog作为我的应用程序中的主窗口(最初它是一个JFrame,但它在任务栏中显示我不想要)。
目前我在做:
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
当我点击退出按钮时:
frame.dispose();
但这个过程似乎仍然存在于背景中
JFrame有JFrame.EXIT_ON_CLOSE
似乎做了我想做的事。
如何正确关闭我的应用程序?
答案 0 :(得分:11)
您需要添加一个WindowListener,当对话框关闭时,它将执行System.exit(0)。
JDialog dialog = ...;
dialog.addWindowListener(new WindowAdapter() {
@Override public void windowClosed(WindowEvent e) {
System.exit(0);
}
});
当然,仍然需要在你点击退出按钮(在这个线程的其他地方建议)之后的System.exit(0)。
答案 1 :(得分:6)
您可以添加
System.exit(0);
您希望程序结束,也可以在dispose()行之后立即结束。
答案 2 :(得分:3)
考虑使用JWindow
(通过defalut取消decoretad),但这有点复杂的事实,JWindow
需要从JFrame
初始化(只是必须存在,没有别的)作为父< / p>
最好添加WindowListener
,所有事件/操作都会被重定向/管理this way
答案 3 :(得分:1)
您知道 JDialog
字段也由EXIT_ON_CLOSE
继承,对吗?
正如EXIT_ON_CLOSE
所述,JDialog
不是DO_NOTHING_ON_CLOSE
类的@camickr方法的有效值。如API所述,
设置用户启动时默认执行的操作 这个对话框上的“关闭”。您必须指定以下之一 选择:
WindowConstants
(在HIDE_ON_CLOSE
中定义):不要做任何事情;要求程序处理中的操作 注册WindowListener对象的windowClosing方法。WindowConstants
(在WindowListener
中定义):在调用任何已注册的DISPOSE_ON_CLOSE
对象后自动隐藏对话框。WindowListener
(在WindowConstants中定义):在调用任何已注册的EXIT_ON_CLOSE
对象后自动隐藏和处置对话框。
如果IllegalArgumentException
作为参数传递,则会抛出{{1}}。
答案 4 :(得分:0)
对我来说,只使用windowClosing事件:
dialog.addWindowListener(new WindowAdapter()
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
答案 5 :(得分:0)
你可以尝试下面这个惊人的源代码 -
JDialog dialog = (JDialog) container;
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
dialog.setModal(false);
dialog.setVisible(false);
dialog.dispose();
Runtime.getRuntime().exit(1);
上面说过这将关闭进程以及处理JDialog容器后,还有一个好处就是,如果这个JDialog在任何其他JFrame或JDialog之上运行,那么父进程不会终止但是如果这个JDialog是单独运行,然后该过程将完全终止,享受。