Do not automatically select Java non for x86 and x86-64

This commit is contained in:
Glavo 2021-10-14 03:12:23 +08:00 committed by Yuhui Huang
parent 42a40a844a
commit 21e44bbc90
4 changed files with 31 additions and 9 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
/**