From c37576fda7453321e35b409cbb0993bc92a746f4 Mon Sep 17 00:00:00 2001
From: Karlatemp <karlatemp@vip.qq.com>
Date: Sat, 30 Apr 2022 12:49:28 +0800
Subject: [PATCH] Log exception when failed to initialize `java.desktop` for
 better user debugging; Use CLI if in headless mode

---
 mirai-core-api/src/jvmMain/kotlin/utils/SwingSolver.kt | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/mirai-core-api/src/jvmMain/kotlin/utils/SwingSolver.kt b/mirai-core-api/src/jvmMain/kotlin/utils/SwingSolver.kt
index 28d7d17f2..b93ec1364 100644
--- a/mirai-core-api/src/jvmMain/kotlin/utils/SwingSolver.kt
+++ b/mirai-core-api/src/jvmMain/kotlin/utils/SwingSolver.kt
@@ -141,6 +141,9 @@ internal object WindowHelperJvm {
         }
         if (System.getProperty("mirai.no-desktop") != null) return@run PlatformKind.CLI
         kotlin.runCatching {
+            Class.forName("java.awt.GraphicsEnvironment")
+            if (GraphicsEnvironment.isHeadless()) return@run PlatformKind.CLI
+
             Class.forName("java.awt.Desktop")
             Class.forName("java.awt.Toolkit")
             Toolkit.getDefaultToolkit()
@@ -160,6 +163,9 @@ internal object WindowHelperJvm {
             } else {
                 return@run PlatformKind.CLI
             }
+        }.onFailure { error ->
+            if (error.javaClass == ClassNotFoundException::class.java && error.cause == null) return@onFailure
+            logger.warning("Failed to initialize module `java.desktop`", error)
         }.getOrElse {
             return@run PlatformKind.CLI
         }