当JDialog是主窗口时正确关闭java程序

时间:2011-08-25 13:36:25

标签: java swing windowlistener

我有一个JDialog作为我的应用程序中的主窗口(最初它是一个JFrame,但它在任务栏中显示我不想要)。

目前我在做:

setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

当我点击退出按钮时:

frame.dispose();

但这个过程似乎仍然存在于背景中

JFrame有JFrame.EXIT_ON_CLOSE似乎做了我想做的事。

如何正确关闭我的应用程序?

6 个答案:

答案 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是单独运行,然后该过程将完全终止,享受。