Java中如何关闭次级JFrame而不触发主JFrame同步关闭
Java Swing次级JFrame关闭导致主JFrame同步关闭的解决方法
问题根源
次级JFrame的默认关闭行为被设置为JFrame.EXIT_ON_CLOSE,该配置会在窗口关闭时直接终止当前Java虚拟机进程,所有关联的窗体都会被强制销毁,主JFrame会随进程终止同步关闭。
解决方法
- 调整次级JFrame的默认关闭操作,将原有的
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)替换为符合需求的配置:- 关闭后直接销毁次级窗口、释放占用资源:使用
JFrame.DISPOSE_ON_CLOSE - 仅隐藏次级窗口,后续需要时可以重新唤起:使用
JFrame.HIDE_ON_CLOSE
- 关闭后直接销毁次级窗口、释放占用资源:使用
- 单独为主JFrame配置关闭操作,保证只有关闭主窗口时才退出整个程序:
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
代码示例
import javax.swing.JFrame; import javax.swing.JButton; public class MultiFrameDemo { public static void main(String[] args) { // 主窗体配置 JFrame mainFrame = new JFrame("主窗体"); mainFrame.setSize(400, 300); // 仅关闭主窗体时退出程序 mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 唤起次级窗体的按钮 JButton openSubBtn = new JButton("打开次级窗体"); openSubBtn.addActionListener(e -> { JFrame subFrame = new JFrame("次级窗体"); subFrame.setSize(300, 200); // 次级窗体关闭仅销毁自身,不终止进程 subFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); subFrame.setVisible(true); }); mainFrame.add(openSubBtn); mainFrame.setVisible(true); } }
内容的提问来源于stack exchange,提问作者ahad nadeem
相关产品推荐
相关产品推荐

