上一篇                     
               
			  Java中如何关闭窗口?
- 后端开发
- 2025-06-19
- 3559
 在Java中关闭窗口可通过调用
 
 
dispose()方法实现,frame.dispose()
 ,对于Swing的JFrame,也可设置默认关闭行为:setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
 ,监听WindowEvent并执行System.exit(0)`能彻底终止程序。
在Java中关闭窗口取决于使用的GUI框架(如Swing或JavaFX),以下是详细实现方法和代码示例:
Swing框架关闭窗口
方法1:设置默认关闭操作(推荐)

import javax.swing.*;
public class CloseWindowExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("窗口标题");
        frame.setSize(400, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关键代码
        frame.setVisible(true);
    }
} 
- JFrame.EXIT_ON_CLOSE:点击关闭按钮时终止程序
- 其他选项: 
  - JFrame.HIDE_ON_CLOSE:隐藏窗口(不终止程序)
- JFrame.DISPOSE_ON_CLOSE:释放窗口资源
 
方法2:添加WindowListener监听器
frame.addWindowListener(new java.awt.event.WindowAdapter() {
    @Override
    public void windowClosing(java.awt.event.WindowEvent e) {
        // 可添加自定义操作(如保存数据)
        System.exit(0); // 终止程序
    }
}); 
方法3:通过按钮触发关闭

JButton closeButton = new JButton("关闭窗口");
closeButton.addActionListener(e -> {
    frame.dispose();  // 关闭当前窗口
    // 或 System.exit(0) 终止整个程序
});
frame.add(closeButton); 
JavaFX框架关闭窗口
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Stage;
public class JavaFXCloseExample extends Application {
    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button("关闭窗口");
        btn.setOnAction(e -> {
            primaryStage.close();  // 关闭窗口
            // Platform.exit(); // 终止整个JavaFX应用
        });
        Scene scene = new Scene(btn, 300, 200);
        primaryStage.setTitle("JavaFX窗口");
        primaryStage.setScene(scene);
        primaryStage.show();
        // 直接关闭窗口时终止程序
        primaryStage.setOnCloseRequest(event -> {
            System.exit(0);
        });
    }
} 
关键注意事项
- 资源释放: 
  - 使用dispose()仅关闭当前窗口
- System.exit(0)会终止整个JVM进程
 
- 使用
- 多窗口场景: 
  - 主窗口关闭用EXIT_ON_CLOSE
- 子窗口关闭用DISPOSE_ON_CLOSE
 
- 主窗口关闭用
- 保存操作: 
  - 在windowClosing()或setOnCloseRequest()中添加数据保存逻辑
- 使用JOptionPane确认关闭:int result = JOptionPane.showConfirmDialog(frame, "确定退出?"); if (result == JOptionPane.YES_OPTION) { System.exit(0); }
 
- 在
常见问题解决
- 窗口无法关闭:检查是否遗漏setDefaultCloseOperation
- 程序未终止:后台线程未停止,需调用System.exit(0)
- JavaFX卡死:用Platform.exit()替代System.exit(0)
引用说明:本文代码基于Oracle官方Java文档实现,遵循Swing和JavaFX标准API规范,关闭操作涉及
java.awt.Window、javafx.stage.Window等核心类,详细参考Java SE官方文档。
根据需求选择对应方法:Swing使用setDefaultCloseOperation()最简洁,JavaFX优先用stage.close(),实际开发中建议在关闭前添加数据保存确认逻辑,提升用户体验。

 
  
			 
			 
			 
			 
			 
			 
			 
			