繁体   English   中英

在继续之前等待 Swing GUI 关闭

[英]Wait for Swing GUI to close before continuing

我正在编写一个应用程序,它要求用户将一些数据输入到应用程序将使用的 Swing GUI 中。 用户输入数据后,不再需要 GUI,因为应用程序会将一些数据写入文件。

大体思路是这样的:

launchGui();
closeGui();
continueWithComputation();

我知道 Swing 在后台使用了几个线程,这就是为什么程序在 GUI 关闭之前不会阻塞的原因。

在继续continueWithComputation()之前,是否有可能以任何方式等待 GUI 关闭(单个JFramedispose()关闭continueWithComputation()

在继续之前等待 Swing GUI 关闭

使用模态对话框。 有关更多详细信息,请参阅以下内容:

在继续使用 continueWithComputation() 之前,是否有可能以任何方式等待 GUI 关闭(使用 dispose() 关闭单个 JFrame)?

  • 用户操作添加WindowListener

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

我刚刚遇到了类似的问题,但没有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

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

public class frameMain extends JDialog{ 

确保在您使用的构造函数中:

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM