mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-24 11:45:31 -04:00
优化 Java 自动选择规则 (#4515)
This commit is contained in:
parent
eb3be8c465
commit
c38371f454
@ -264,16 +264,15 @@ public final class JavaManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int compareJavaVersion(JavaRuntime java1, JavaRuntime java2, GameJavaVersion suggestedJavaVersion) {
|
private static JavaRuntime chooseJava(@Nullable JavaRuntime java1, JavaRuntime java2) {
|
||||||
if (suggestedJavaVersion != null) {
|
if (java1 == null)
|
||||||
boolean b1 = java1.getParsedVersion() == suggestedJavaVersion.getMajorVersion();
|
return java2;
|
||||||
boolean b2 = java2.getParsedVersion() == suggestedJavaVersion.getMajorVersion();
|
|
||||||
|
|
||||||
if (b1 != b2)
|
if (java1.getParsedVersion() != java2.getParsedVersion())
|
||||||
return b1 ? 1 : -1;
|
// Prefer the Java version that is closer to the game's recommended Java version
|
||||||
}
|
return java1.getParsedVersion() < java2.getParsedVersion() ? java1 : java2;
|
||||||
|
else
|
||||||
return java1.getVersionNumber().compareTo(java2.getVersionNumber());
|
return java1.getVersionNumber().compareTo(java2.getVersionNumber()) >= 0 ? java1 : java2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@ -289,9 +288,6 @@ public final class JavaManager {
|
|||||||
&& (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS)
|
&& (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS || OperatingSystem.CURRENT_OS == OperatingSystem.MACOS)
|
||||||
&& (gameVersion == null || gameVersion.compareTo("1.6") < 0);
|
&& (gameVersion == null || gameVersion.compareTo("1.6") < 0);
|
||||||
|
|
||||||
GameJavaVersion suggestedJavaVersion =
|
|
||||||
(version != null && gameVersion != null && gameVersion.compareTo("1.7.10") >= 0) ? version.getJavaVersion() : null;
|
|
||||||
|
|
||||||
JavaRuntime mandatory = null;
|
JavaRuntime mandatory = null;
|
||||||
JavaRuntime suggested = null;
|
JavaRuntime suggested = null;
|
||||||
for (JavaRuntime java : javaRuntimes) {
|
for (JavaRuntime java : javaRuntimes) {
|
||||||
@ -319,15 +315,10 @@ public final class JavaManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!violationMandatory) {
|
if (!violationMandatory) {
|
||||||
if (mandatory == null) mandatory = java;
|
mandatory = chooseJava(mandatory, java);
|
||||||
else if (compareJavaVersion(java, mandatory, suggestedJavaVersion) > 0)
|
|
||||||
mandatory = java;
|
|
||||||
|
|
||||||
if (!violationSuggested) {
|
if (!violationSuggested)
|
||||||
if (suggested == null) suggested = java;
|
suggested = chooseJava(suggested, java);
|
||||||
else if (compareJavaVersion(java, suggested, suggestedJavaVersion) > 0)
|
|
||||||
suggested = java;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ public final class JavaRuntimeTest {
|
|||||||
public void testParseVersion() {
|
public void testParseVersion() {
|
||||||
assertEquals(8, parseVersion("1.8.0_302"));
|
assertEquals(8, parseVersion("1.8.0_302"));
|
||||||
assertEquals(8, parseVersion("1.8-internal"));
|
assertEquals(8, parseVersion("1.8-internal"));
|
||||||
|
assertEquals(8, parseVersion("8.0"));
|
||||||
assertEquals(11, parseVersion("11"));
|
assertEquals(11, parseVersion("11"));
|
||||||
assertEquals(11, parseVersion("11.0.12"));
|
assertEquals(11, parseVersion("11.0.12"));
|
||||||
assertEquals(11, parseVersion("11-internal"));
|
assertEquals(11, parseVersion("11-internal"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user