Skip to content

Commit f62c12f

Browse files
authored
[release/3.6] 优化 Java 自动选择规则 (#4534)
#4515
1 parent 1205212 commit f62c12f

2 files changed

Lines changed: 13 additions & 21 deletions

File tree

HMCL/src/main/java/org/jackhuang/hmcl/java/JavaManager.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -255,16 +255,15 @@ public static void removeJava(Path realPath) throws InterruptedException {
255255
}
256256
}
257257

258-
private static int compareJavaVersion(JavaRuntime java1, JavaRuntime java2, GameJavaVersion suggestedJavaVersion) {
259-
if (suggestedJavaVersion != null) {
260-
boolean b1 = java1.getParsedVersion() == suggestedJavaVersion.getMajorVersion();
261-
boolean b2 = java2.getParsedVersion() == suggestedJavaVersion.getMajorVersion();
258+
private static JavaRuntime chooseJava(@Nullable JavaRuntime java1, JavaRuntime java2) {
259+
if (java1 == null)
260+
return java2;
262261

263-
if (b1 != b2)
264-
return b1 ? 1 : -1;
265-
}
266-
267-
return java1.getVersionNumber().compareTo(java2.getVersionNumber());
262+
if (java1.getParsedVersion() != java2.getParsedVersion())
263+
// Prefer the Java version that is closer to the game's recommended Java version
264+
return java1.getParsedVersion() < java2.getParsedVersion() ? java1 : java2;
265+
else
266+
return java1.getVersionNumber().compareTo(java2.getVersionNumber()) >= 0 ? java1 : java2;
268267
}
269268

270269
@Nullable
@@ -280,9 +279,6 @@ public static JavaRuntime findSuitableJava(Collection<JavaRuntime> javaRuntimes,
280279
&& (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS)
281280
&& (gameVersion == null || gameVersion.compareTo("1.6") < 0);
282281

283-
GameJavaVersion suggestedJavaVersion =
284-
(version != null && gameVersion != null && gameVersion.compareTo("1.7.10") >= 0) ? version.getJavaVersion() : null;
285-
286282
JavaRuntime mandatory = null;
287283
JavaRuntime suggested = null;
288284
for (JavaRuntime java : javaRuntimes) {
@@ -310,15 +306,10 @@ public static JavaRuntime findSuitableJava(Collection<JavaRuntime> javaRuntimes,
310306
}
311307

312308
if (!violationMandatory) {
313-
if (mandatory == null) mandatory = java;
314-
else if (compareJavaVersion(java, mandatory, suggestedJavaVersion) > 0)
315-
mandatory = java;
316-
317-
if (!violationSuggested) {
318-
if (suggested == null) suggested = java;
319-
else if (compareJavaVersion(java, suggested, suggestedJavaVersion) > 0)
320-
suggested = java;
321-
}
309+
mandatory = chooseJava(mandatory, java);
310+
311+
if (!violationSuggested)
312+
suggested = chooseJava(suggested, java);
322313
}
323314
}
324315

HMCLCore/src/test/java/org/jackhuang/hmcl/util/platform/JavaRuntimeTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public final class JavaRuntimeTest {
1313
public void testParseVersion() {
1414
assertEquals(8, parseVersion("1.8.0_302"));
1515
assertEquals(8, parseVersion("1.8-internal"));
16+
assertEquals(8, parseVersion("8.0"));
1617
assertEquals(11, parseVersion("11"));
1718
assertEquals(11, parseVersion("11.0.12"));
1819
assertEquals(11, parseVersion("11-internal"));

0 commit comments

Comments
 (0)