You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 10:54:04