mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-02-23 17:19:44 +08:00
Do not automatically select Java non for x86 and x86-64
This commit is contained in:
parent
42a40a844a
commit
21e44bbc90
@ -546,10 +546,8 @@ public final class VersionSettingsPage extends StackPane implements DecoratorPag
|
||||
memoryStatus.set(OperatingSystem.getPhysicalMemoryStatus().orElse(OperatingSystem.PhysicalMemoryStatus.INVALID));
|
||||
|
||||
Task.supplyAsync(JavaVersion::getJavas).thenAcceptAsync(Schedulers.javafx(), list -> {
|
||||
boolean isX86 = (Architecture.SYSTEM_ARCH == Architecture.X86 || Architecture.SYSTEM_ARCH == Architecture.X86_64)
|
||||
&& list.stream()
|
||||
.map(java -> java.getPlatform().getArchitecture())
|
||||
.allMatch(arch -> arch == Architecture.X86 || arch == Architecture.X86_64);
|
||||
boolean isX86 = (Architecture.SYSTEM_ARCH.isX86())
|
||||
&& list.stream().allMatch(java -> java.getArchitecture().isX86());
|
||||
|
||||
// boolean showSystem = list.stream().anyMatch(java -> java.getPlatform().getOperatingSystem() != OperatingSystem.CURRENT_OS);
|
||||
|
||||
|
@ -111,7 +111,7 @@ public enum JavaVersionConstraint {
|
||||
|
||||
@Override
|
||||
public boolean checkJava(VersionNumber gameVersionNumber, Version version, JavaVersion javaVersion) {
|
||||
return javaVersion.getArchitecture() == Architecture.X86 || javaVersion.getArchitecture() == Architecture.X86_64;
|
||||
return javaVersion.getArchitecture().isX86();
|
||||
}
|
||||
};
|
||||
|
||||
@ -173,17 +173,20 @@ public enum JavaVersionConstraint {
|
||||
JavaVersion mandatory = null;
|
||||
JavaVersion suggested = null;
|
||||
for (JavaVersion javaVersion : JavaVersion.getJavas()) {
|
||||
// select the latest java version that this version accepts.
|
||||
// select the latest x86 java that this version accepts.
|
||||
if(!javaVersion.getArchitecture().isX86())
|
||||
continue;
|
||||
|
||||
VersionNumber javaVersionNumber = javaVersion.getVersionNumber();
|
||||
if (range.getMandatory().contains(javaVersionNumber)) {
|
||||
if (mandatory == null) mandatory = javaVersion;
|
||||
else if (javaVersionNumber.compareTo(mandatory.getVersionNumber()) > 0) {
|
||||
else if (compareJavaVersion(javaVersion, mandatory) > 0) {
|
||||
mandatory = javaVersion;
|
||||
}
|
||||
}
|
||||
if (range.getSuggested().contains(javaVersionNumber)) {
|
||||
if (suggested == null) suggested = javaVersion;
|
||||
else if (javaVersionNumber.compareTo(suggested.getVersionNumber()) > 0) {
|
||||
else if (compareJavaVersion(javaVersion, suggested) > 0) {
|
||||
suggested = javaVersion;
|
||||
}
|
||||
}
|
||||
@ -193,6 +196,21 @@ public enum JavaVersionConstraint {
|
||||
else return mandatory;
|
||||
}
|
||||
|
||||
private static int compareJavaVersion(JavaVersion javaVersion1, JavaVersion javaVersion2) {
|
||||
Architecture arch1 = javaVersion1.getArchitecture();
|
||||
Architecture arch2 = javaVersion2.getArchitecture();
|
||||
|
||||
if (arch1 != arch2) {
|
||||
if (arch1 == Architecture.X86_64) {
|
||||
return 1;
|
||||
}
|
||||
if (arch2 == Architecture.X86_64) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return javaVersion1.getVersionNumber().compareTo(javaVersion2.getVersionNumber());
|
||||
}
|
||||
|
||||
public static final int RULE_MANDATORY = 1;
|
||||
public static final int RULE_SUGGESTED = 2;
|
||||
|
||||
|
@ -82,6 +82,10 @@ public enum Architecture {
|
||||
return displayName;
|
||||
}
|
||||
|
||||
public boolean isX86() {
|
||||
return this == X86 || this == X86_64;
|
||||
}
|
||||
|
||||
public static final String CURRENT_ARCH_NAME;
|
||||
public static final Architecture CURRENT_ARCH;
|
||||
public static final Architecture SYSTEM_ARCH;
|
||||
|
@ -48,12 +48,14 @@ public final class JavaVersion {
|
||||
private final String longVersion;
|
||||
private final Platform platform;
|
||||
private final int version;
|
||||
private final VersionNumber versionNumber;
|
||||
|
||||
public JavaVersion(Path binary, String longVersion, Platform platform) {
|
||||
this.binary = binary;
|
||||
this.longVersion = longVersion;
|
||||
this.platform = platform;
|
||||
version = parseVersion(longVersion);
|
||||
versionNumber = VersionNumber.asVersion(longVersion);
|
||||
}
|
||||
|
||||
public Path getBinary() {
|
||||
@ -77,7 +79,7 @@ public final class JavaVersion {
|
||||
}
|
||||
|
||||
public VersionNumber getVersionNumber() {
|
||||
return VersionNumber.asVersion(longVersion);
|
||||
return versionNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user