From b5484bb13b41dccf732d126edfd96cd6f9d1c308 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Tue, 12 Oct 2021 22:53:09 +0800 Subject: [PATCH] fix(system): we may get x86_64 when running 32-bit JVM in 64-bit Windows. --- .../hmcl/util/platform/Architecture.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java index 5a3098a98..0e4b0b0a1 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/Architecture.java @@ -17,7 +17,10 @@ */ package org.jackhuang.hmcl.util.platform; +import org.jackhuang.hmcl.util.StringUtils; + import java.util.Locale; +import java.util.Optional; import static org.jackhuang.hmcl.util.platform.Platform.BIT_32; import static org.jackhuang.hmcl.util.platform.Platform.BIT_64; @@ -119,6 +122,25 @@ public enum Architecture { return UNKNOWN; } + private static Architecture normalizeProcessorArchitecture() { + String processorArchitecture = System.getenv("PROCESSOR_ARCHITECTURE"); + if (StringUtils.isBlank(processorArchitecture)) return null; + + switch (processorArchitecture) { + case "AMD64": + case "EM64T": + return X86_64; + case "IA64": + return IA64; + case "ARM64": + return ARM64; + case "X86": + return X86; + default: + return null; + } + } + private static String normalize(String value) { if (value == null) { return ""; @@ -129,6 +151,7 @@ public enum Architecture { static { SYSTEM_ARCHITECTURE = System.getProperty("os.arch"); - CURRENT = normalizeArch(SYSTEM_ARCHITECTURE); + CURRENT = Optional.ofNullable(normalizeProcessorArchitecture()) + .orElseGet(() -> normalizeArch(SYSTEM_ARCHITECTURE)); } }