Repository: HMCL-dev/HMCL (language: java)

Issue:
[Bug] v3.5.8 版本在退出时卡死
### 平台 | Platform

macOS 14.4.1 on Apple M1

### 问题描述 | Problem Description

触发方式：
- 打开启动器
- 按“Cmd+Q”退出
- 卡死

触发版本为v3.5.8，v3.5.7无此问题

### 启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File

[macOS生成的崩溃报告.txt](https://github.com/HMCL-dev/HMCL/files/15441725/macOS.txt)



Discussion / hints:
请分别用 HMCL 3.5.7 和 3.5.8 启动游戏，之后分别：在启动器的 设置 -- 通用 中导出启动器日志，然后把导出的文件发出来 https://gitcode.net/chearlai/kookfiles/-/raw/master/assets/2023-01/oHQeKnzwWj0md0dr.png
[v3.5.8-点叉退出.log](https://github.com/HMCL-dev/HMCL/files/15443284/v3.5.8-.log)
[v3.5.8-强制退出.log](https://github.com/HMCL-dev/HMCL/files/15443285/v3.5.8-.log)
[v3.5.7-点叉退出.log](https://github.com/HMCL-dev/HMCL/files/15443286/v3.5.7-.log)
[v3.5.7-正常退出.log](https://github.com/HMCL-dev/HMCL/files/15443287/v3.5.7-.log)

你确定 v3.5.7 上没有类似问题？我看你的日志上所用的 JRE 是一致的
> 你确定 v3.5.7 上没有类似问题？我看你的日志上所用的 JRE 是一致的

日志确实是一样的，所以问题应该出在没有监听Cmd+Q退出事件上
直接点叉退出的日志和这个不一样，还多了几行
最新测试，出问题的最早版本为 v3.5.7.245
麻烦有权限的人过一下 #3081 谢谢，已经在那修复了

Fix patch:
diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/logging/Logger.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/logging/Logger.java
index 6ffc4f2925..771fcce0d3 100644
--- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/logging/Logger.java
+++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/logging/Logger.java
@@ -111,13 +111,14 @@ private void handle(LogEvent event) {
         }
     }
 
-    private void onShutdown() {
+    private void onExit() {
+        shutdown();
         try {
             loggerThread.join();
         } catch (InterruptedException ignored) {
         }
 
-        String caller = CLASS_NAME + ".onShutdown";
+        String caller = CLASS_NAME + ".onExit";
 
         if (logRetention > 0 && logFile != null) {
             List<Pair<Path, int[]>> list = new ArrayList<>();
@@ -258,7 +259,7 @@ public void start(Path logFolder) {
         loggerThread.setName("HMCL Logger Thread");
         loggerThread.start();
 
-        Thread cleanerThread = new Thread(this::onShutdown);
+        Thread cleanerThread = new Thread(this::onExit);
         cleanerThread.setName("HMCL Logger Shutdown Hook");
         Runtime.getRuntime().addShutdownHook(cleanerThread);
     }


Test patch: