From e2f50c92e9593598514c7eab0535a103049b7493 Mon Sep 17 00:00:00 2001 From: Glavo Date: Sat, 22 Mar 2025 12:17:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E9=83=A8=E5=88=86=20Java=20=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E7=9A=84=E9=97=AE=E9=A2=98=20(#3759)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复无法解析部分 Java 版本号的问题 * update * update --- .../org/jackhuang/hmcl/java/JavaInfo.java | 32 +++++++++---------- .../hmcl/util/platform/JavaRuntimeTest.java | 8 +++++ 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/java/JavaInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/java/JavaInfo.java index d23f5a46a..b39b4fd60 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/java/JavaInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/java/JavaInfo.java @@ -38,25 +38,23 @@ import java.nio.file.Path; * @author Glavo */ public final class JavaInfo { + public static int parseVersion(String version) { + int startIndex = version.startsWith("1.") ? 2 : 0; + int endIndex = startIndex; + + while (endIndex < version.length()) { + char ch = version.charAt(endIndex); + if (ch >= '0' && ch <= '9') + endIndex++; + else + break; + } + try { - int idx = version.indexOf('.'); - if (idx < 0) { - idx = version.indexOf('u'); - return idx > 0 ? Integer.parseInt(version.substring(0, idx)) : Integer.parseInt(version); - } else { - int major = Integer.parseInt(version.substring(0, idx)); - if (major != 1) { - return major; - } else { - int idx2 = version.indexOf('.', idx + 1); - if (idx2 < 0) { - return -1; - } - return Integer.parseInt(version.substring(idx + 1, idx2)); - } - } - } catch (NumberFormatException e) { + return endIndex > startIndex ? Integer.parseInt(version.substring(startIndex, endIndex)) : -1; + } catch (Throwable e) { + // The version number is too long return -1; } } diff --git a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/platform/JavaRuntimeTest.java b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/platform/JavaRuntimeTest.java index 00065986c..a4b2c9c87 100644 --- a/HMCLCore/src/test/java/org/jackhuang/hmcl/util/platform/JavaRuntimeTest.java +++ b/HMCLCore/src/test/java/org/jackhuang/hmcl/util/platform/JavaRuntimeTest.java @@ -12,7 +12,15 @@ public final class JavaRuntimeTest { @Test public void testParseVersion() { assertEquals(8, parseVersion("1.8.0_302")); + assertEquals(8, parseVersion("1.8-internal")); assertEquals(11, parseVersion("11")); assertEquals(11, parseVersion("11.0.12")); + assertEquals(11, parseVersion("11-internal")); + assertEquals(11, parseVersion("11+abc")); + + assertEquals(-1, parseVersion("abc")); + assertEquals(-1, parseVersion("1.")); + assertEquals(-1, parseVersion("1.-internal")); + assertEquals(-1, parseVersion("")); } }