From b2dbbac6ca8f5a814ce1cc4ad72b54c67cc014cd Mon Sep 17 00:00:00 2001 From: SashegDev Date: Fri, 8 May 2026 17:58:18 +0000 Subject: [PATCH] Fix: NPE in AuthManager, game logs display in UI --- .../sashegdev/zernmc/launcher/auth/AuthManager.java | 11 ++++++++--- .../sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java | 11 ++++------- launcher/launcher/src/resources/ui/launcher.js | 2 -- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/auth/AuthManager.java b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/auth/AuthManager.java index 7e30a01..0bea6d3 100644 --- a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/auth/AuthManager.java +++ b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/auth/AuthManager.java @@ -10,6 +10,7 @@ import me.sashegdev.zernmc.launcher.utils.ZAnsi; import me.sashegdev.zernmc.launcher.utils.ZHttpClient; import java.io.IOException; +import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; @@ -252,11 +253,15 @@ public class AuthManager { } int statusCode = conn.getResponseCode(); - var is = (statusCode >= 200 && statusCode < 300) ? conn.getInputStream() : conn.getErrorStream(); + InputStream is = (statusCode >= 200 && statusCode < 300) ? conn.getInputStream() : conn.getErrorStream(); String responseBody; - try (var scanner = new java.util.Scanner(is, StandardCharsets.UTF_8.name())) { - responseBody = scanner.useDelimiter("\\A").hasNext() ? scanner.next() : ""; + if (is != null) { + try (var scanner = new java.util.Scanner(is, StandardCharsets.UTF_8.name())) { + responseBody = scanner.useDelimiter("\\A").hasNext() ? scanner.next() : ""; + } + } else { + responseBody = "No response body (status " + statusCode + ")"; } return new SimpleHttpResponse(statusCode, responseBody); diff --git a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java index 2b249dd..29846da 100644 --- a/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java +++ b/launcher/launcher/src/main/java/sashegdev/zernmc/launcher/ui/jfx/JFXLauncher.java @@ -41,7 +41,6 @@ public class JFXLauncher extends Application { private Stage mainStage; public static void appendGameLog(String log) { - System.out.println("[GAMELOG] " + log); synchronized (gameLogBuffer) { gameLogBuffer.append(log).append("\n"); @@ -56,6 +55,9 @@ public class JFXLauncher extends Application { } public static void initGameLog(Path instanceDir) { + synchronized (gameLogBuffer) { + gameLogBuffer.setLength(0); + } try { Path logsDir = instanceDir.resolve("logs"); Files.createDirectories(logsDir); @@ -266,12 +268,7 @@ public class JFXLauncher extends Application { } private void handleGameLogs(HttpExchange exchange) { - String logs = getGameLogs(); - log("[GAME-LOGS-API] Request, logs length: " + logs.length()); - if (!logs.isEmpty()) { - log("[GAME-LOGS-API] First 200 chars: " + logs.substring(0, Math.min(200, logs.length()))); - } - sendJson(exchange, Map.of("success", true, "data", logs)); + sendJson(exchange, Map.of("success", true, "data", getGameLogs())); } private void handleExit(HttpExchange exchange) { diff --git a/launcher/launcher/src/resources/ui/launcher.js b/launcher/launcher/src/resources/ui/launcher.js index 6edea1d..42f20d2 100644 --- a/launcher/launcher/src/resources/ui/launcher.js +++ b/launcher/launcher/src/resources/ui/launcher.js @@ -268,10 +268,8 @@ function startLogPolling() { // Game logs const gameResult = await apiCall('/game-logs'); - console.log('[DEBUG] Game logs request:', gameResult.success, 'length:', gameResult.data ? gameResult.data.length : 0); if (gameResult.success && gameResult.data && gameResult.data.length > lastGameLogLength) { const newLogs = gameResult.data.substring(lastGameLogLength); - console.log('[DEBUG] New game logs:', newLogs.substring(0, 200)); const lines = newLogs.split('\n').filter(l => l.trim()); lines.forEach(line => { log('[GAME] ' + line, 'info');