如何解决Swing应用程序中的Swing弹出窗口
| 我有一个带有一定数量按钮的Swing UI。一个按钮调用一个单独的swing类,并使用新按钮和其他功能打开一个新窗口。现在,当我关闭此窗口时,原始窗口也将关闭。 我认为这是因为两个班级都参加了javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
//some code
}
}
现在该如何克服呢?代码示例或链接将非常有帮助。
谢谢
解决方法
不看代码就很难猜测。可能您的
JFrame
已设置setDefaultCloseOperation
,以在关闭窗口时关闭应用程序(可能是EXIT_ON_CLOSE
)。看看java doc以获得更多信息。
从Java文档中:
EXIT_ON_CLOSE
(在JFrame
中定义):使用System exit
方法退出应用程序。仅在应用程序中使用它。
这意味着整个应用程序将关闭。您不想要第二个窗口。您只希望关闭窗口(而不是应用程序)。
, SwingUtilities.invokeLater
与应用程序关闭没有关系。其目的是将“ 8”方法调用推迟到GUI线程完成绘制和处理当前事件时执行。
我建议您像已经建议的那样检查代码中的EXIT_ON_CLOSE
和System.exit()
调用。
为了回答评论,由于在两个框架上都设置了“ 3”,所以关闭任何一个框架时退出整个应用程序都是预期的行为。参见Javadoc。
要解决您的问题,您需要在第二帧上删除此setDefaultCloseOperation
。
, 我同意其他人的看法,使用ѭ7来在Swing主线程,EDT或事件调度线程上调用您的代码与您的问题无关,实际上,这是一个很好的习惯,可以避免风险通过不这样做,您的代码可能会从EDT中退出。换句话说,如果要从JButton的ActionListener中调用的代码显示其他窗口,则无需使用ѭ7,因为将在EDT上调用actionPerformed方法。
回到您要解决的问题,我建议您将另一个窗口设为JDialog(取决于您的需要,是否为应用程序的模式),而不是JFrame。这样做可以使对话框保持在主JFrame上方,并允许用户在返回主GUI之前强制用户处理对话框,并且可以防止在对话框关闭时关闭应用程序。
为了回答您可能遇到的下一个问题,是的,JDialogs可以容纳与任何JFrame一样复杂的GUI。
, 尝试在父JFrame上使用ѭ15。
当最后一个JFrame关闭时,15将终止应用程序,而当JFrame关闭时,ѭ3将终止应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。