[英]Wait for Swing GUI to close before continuing
我正在编写一个应用程序,它要求用户将一些数据输入到应用程序将使用的 Swing GUI 中。 用户输入数据后,不再需要 GUI,因为应用程序会将一些数据写入文件。
大体思路是这样的:
launchGui();
closeGui();
continueWithComputation();
我知道 Swing 在后台使用了几个线程,这就是为什么程序在 GUI 关闭之前不会阻塞的原因。
在继续continueWithComputation()
之前,是否有可能以任何方式等待 GUI 关闭(单个JFrame
用dispose()
关闭continueWithComputation()
?
在继续使用 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.