单击JFrame.EXIT_ON_CLOSE时终止while循环

时间:2014-12-18 13:19:34

标签: java swing while-loop terminate

目前我有一个实时活动的while循环运行,它可以实现我想要的唯一问题是关闭框架(退出应用程序),而while循环仍处于活动状态。

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

我尝试使用if语句来终止循环

if (frame.getDefaultCloseOperation() == 3){
    running = false;
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

不幸的是,只要应用程序自动运行,就会立即设置为3,并且此过程无法正常运行。

如何通过单击要关闭的帧来设置running = false;

我想通过点击connour中的X来关闭应用程序,是否可以在运行活动循环时使用?

4 个答案:

答案 0 :(得分:2)

有几种方法可以达到你想要的效果。

  1. daemon thread中运行循环。这样的线程不会阻止应用程序停止。只需be careful when you call swing code from such a thread

  2. 此问题解释了当用户尝试关闭窗口时如何显示确认对话框:Java - Message when closing JFrame Window

    而不是对话框,只需将running = false;放在那里。

    注意:如果在Swing线程中运行循环,则Swing无法响应该事件。在这种情况下使用解决方案#1。

答案 1 :(得分:1)

只需在声明中设置frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);即可自动关闭循环

答案 2 :(得分:0)

您正在设置默认关闭操作。 但是在你的代码中这个

if (frame.getDefaultCloseOperation() == 3){

仅检查关闭操作是否仍设置为JFrame.EXIT_ON_CLOSE

你想要的是回应关闭事件。 我怀疑你需要this answer

设置帧时,将一些代码添加到初始化块

addWindowListener(this);

然后在同一个类中实现onclosing窗口监听器:

public void windowClosing(WindowEvent event) {
    running = false;
}

答案 3 :(得分:0)

删除frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);,添加Windows侦听器并手动关闭应用程序。

frame.addWindowListener(new WindowAdapter() {

        @Override
        public void windowClosing(WindowEvent e) {
            running = false;
        }

        @Override
        public void windowClosed(WindowEvent e) {
           System.exit(0);
        }
});