等待Swing GUI关闭后再继续

4
我正在编写一个应用程序,需要用户在Swing GUI中输入一些数据,然后应用程序将使用这些数据。用户输入数据后,GUI不再需要,因为应用程序将向文件中写入一些数据。
总体思路如下:
launchGui();
closeGui();
continueWithComputation();

我了解Swing后台使用几个线程,这也是程序在GUI关闭之前不会阻塞的原因。
但是否有任何方法可以等待GUI关闭(只关闭单个JFrame并使用dispose())后继续使用continueWithComputation()?
4个回答

6

2
有没有可能在GUI关闭后等待(使用dispose()关闭单个JFrame)再继续执行continueWithComputation()?
  • 用户操作添加WindowListener

  • 从代码中调用JFrame#setVisible(false),然后可以运行continueWithComputation(),必须通过System.exit(0)关闭此JVM,否则会一直停留在PC的RAM中,直到重新启动或关机。


0

我的建议是将JFrame GUI设置为模态,然后一切都会等待它从屏幕上消失。由于JFrame无法设置为模态,因此您必须将GUI框架作为JDialog打开。我正在使用:

public class frameMain extends JDialog{ 

确保在构造函数中使用:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

无论在何处需要启动GUI框架,您都应该使用:

frameMain frm= new frameMain ();
frm.setModal(true);
frm.setVisible(true);

0

我刚遇到了类似的问题,但是没有closeGui()方法,我使用了WindowListener和一些Java同步来编写这个相对较短的代码片段:

AtomicBoolean closed = new AtomicBoolean(false);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

frame.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosed(WindowEvent e) {
        synchronized(closed) {
            closed.set(true);
            closed.notify();
        }
        super.windowClosed(e);
    }
} );

frame.setVisible(true);
synchronized(closed) {
    while (!closed.get()) {
        closed.wait();
    }
}

// executes after the Frame has been disposed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接