diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java index 777be6b75e..a612bc7319 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java @@ -172,7 +172,7 @@ private Command generateCommandLine(Path nativeFolder) throws IOException { Proxy.Type proxyType = options.getProxyType(); if (proxyType == null) { - res.addDefault("-Djava.net.useSystemProxies", "true"); + res.addDefault("-Djava.net.useSystemProxies=", "true"); } else { String proxyHost = options.getProxyHost(); int proxyPort = options.getProxyPort(); @@ -190,6 +190,33 @@ private Command generateCommandLine(Path nativeFolder) throws IOException { } } + try { + boolean hasIPv4 = false; + java.util.Enumeration nets = java.net.NetworkInterface.getNetworkInterfaces(); + while (nets != null && nets.hasMoreElements() && !hasIPv4) { + java.net.NetworkInterface nif = nets.nextElement(); + try { + if (!nif.isUp() || nif.isLoopback()) continue; + } catch (Throwable ignore) { + // ignore and continue checking other interfaces + continue; + } + java.util.Enumeration addrs = nif.getInetAddresses(); + while (addrs.hasMoreElements()) { + java.net.InetAddress addr = addrs.nextElement(); + if (addr instanceof java.net.Inet4Address && !addr.isLoopbackAddress()) { + hasIPv4 = true; + break; + } + } + } + if (hasIPv4) { + res.addDefault("-Djava.net.preferIPv4Stack=", "true"); + } + } catch (java.net.SocketException e) { + LOG.warning("Failed to detect IPv4 address", e); + } + final int javaVersion = options.getJava().getParsedVersion(); final boolean is64bit = options.getJava().getBits() == Bits.BIT_64;