From bdc34b9fae228ec9387d0fc2f35b6470ba73cf87 Mon Sep 17 00:00:00 2001 From: wangchunxiang <526328077@qq.com> Date: Mon, 13 Oct 2025 17:06:20 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(app):=20=E6=B7=BB=E5=8A=A0=E7=AA=97?= =?UTF-8?q?=E5=8F=A3=E5=85=B3=E9=97=AD=E4=BA=8B=E4=BB=B6=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在主应用类中引入 JavaFX 平台相关类,用于监听窗口关闭事件 - 实现 handleCloseEvent 方法,在用户关闭主窗口时优雅地关闭 Spring 上下文并退出 JVM - 提取 closeApplicationContext 方法,确保 ApplicationContext 安全关闭 - LoginView 中引入 DesktopApplication 和 Platform 类,支持窗口事件处理逻辑 ``` --- .../com/fantaibao/DesktopApplication.java | 21 ++++++++++++++++++- .../java/com/fantaibao/page/LoginView.java | 3 +++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/fantaibao/DesktopApplication.java b/src/main/java/com/fantaibao/DesktopApplication.java index 33d53f2..5c22e97 100644 --- a/src/main/java/com/fantaibao/DesktopApplication.java +++ b/src/main/java/com/fantaibao/DesktopApplication.java @@ -2,7 +2,9 @@ package com.fantaibao; import com.fantaibao.page.LoginView; import javafx.application.Application; +import javafx.application.Platform; import javafx.stage.Stage; +import javafx.stage.WindowEvent; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @@ -27,14 +29,31 @@ public class DesktopApplication extends Application { @Override public void start(Stage primaryStage) { + // 添加窗口关闭事件监听器 + primaryStage.setOnCloseRequest(this::handleCloseEvent); // 直接启动登录界面 new LoginView(primaryStage); } @Override public void stop() { - if (applicationContext != null) { + closeApplicationContext(); + } + + /** + * 关闭Spring Boot应用上下文 + */ + public static void closeApplicationContext() { + if (applicationContext != null && applicationContext.isRunning()) { applicationContext.close(); } } + + private void handleCloseEvent(WindowEvent event) { + // 关闭Spring Boot应用上下文 + closeApplicationContext(); + // 退出JVM + Platform.exit(); + System.exit(0); + } } \ No newline at end of file diff --git a/src/main/java/com/fantaibao/page/LoginView.java b/src/main/java/com/fantaibao/page/LoginView.java index f723350..ddecef6 100644 --- a/src/main/java/com/fantaibao/page/LoginView.java +++ b/src/main/java/com/fantaibao/page/LoginView.java @@ -1,5 +1,7 @@ package com.fantaibao.page; +import com.fantaibao.DesktopApplication; +import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; @@ -9,6 +11,7 @@ import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import javafx.stage.WindowEvent; public class LoginView {