Skip to content

[Bug] 启动参数 -Djava.net.useSystemProxiestrue 格式错误造成严重网络问题;已在 main 分支修复,请求尽快发布稳定版更新 #5580

@LuccaWang404

Description

@LuccaWang404

问题描述 | Bug Description

当 Windows 系统代理开启时,使用 HMCL 3.10.x 启动 Minecraft,会出现严重的网络连接问题:

  • 无法连接至需要代理访问的外网服务器(如 Hypixel 等);
  • 退出服务器后立刻重连可能导致服务端无响应崩溃(见附件日志);
  • 游戏过程中客户端随机掉线。

且无论是否开启系统代理,上述问题仍随机复现。

启动器版本 Launcher Version
HMCL 3.10.3(及所有3.10.x下游版本)

平台 Platform
Windows 11 25H2(其他 Windows 版本同样受影响)

Java
Amazon Corretto 17 、 Adoptium Open JDK 21(任何 Java 版本均会触发)

游戏版本 Game Version
1.20.1~1.21.11(可能为所有在线游戏的版本)

出现问题的启动参数(L2为开发版已修复的启动参数):
Image
在源码中搜索该参数,发现问题源于代理参数的构建方式,该参数位于DefaultLauncher.java(L173~L191):

// HMCL 3.10 分支错误代码
            Proxy.Type proxyType = options.getProxyType();
            if (proxyType == null) {
                res.addDefault("-Djava.net.useSystemProxies", "true");
            } else {
                String proxyHost = options.getProxyHost();
                int proxyPort = options.getProxyPort();

                if (StringUtils.isNotBlank(proxyHost) && proxyPort >= 0 && proxyPort <= 0xFFFF) {
                    if (proxyType == Proxy.Type.HTTP) {
                        res.addDefault("-Dhttp.proxyHost=", proxyHost);
                        res.addDefault("-Dhttp.proxyPort=", String.valueOf(proxyPort));
                        res.addDefault("-Dhttps.proxyHost=", proxyHost);
                        res.addDefault("-Dhttps.proxyPort=", String.valueOf(proxyPort));
                    } else if (proxyType == Proxy.Type.SOCKS) {
                        res.addDefault("-DsocksProxyHost=", proxyHost);
                        res.addDefault("-DsocksProxyPort=", String.valueOf(proxyPort));
                    }
                }
            }

addDefault 方法的实现导致键值之间缺少等号,最终生成 -Djava.net.useSystemProxiestrue

对比PCLII的启动参数(前:HMCL,后:PCLII;PCLII没有-Djava.net.useSystemProxies):
Image
Image
而该问题在 main 及 3.11+ 分支已被修复L172~L204):

//HMCL 3.11+ 分支修正后的代码
            boolean addProxyOptions = res.noneMatch(arg ->
                    arg.startsWith("-Djava.net.useSystemProxies=")
                            || arg.startsWith("-Dhttp.proxy")
                            || arg.startsWith("-Dhttps.proxy")
                            || arg.startsWith("-DsocksProxy")
                            || arg.startsWith("-Djava.net.socks.")
            );

            if (addProxyOptions) {
                if (options.getProxyOption() == null || options.getProxyOption() == ProxyOption.Default.INSTANCE) {
                    res.add("-Djava.net.useSystemProxies=true");
                } else if (options.getProxyOption() instanceof ProxyOption.Http httpProxy) {
                    res.add("-Dhttp.proxyHost=" + httpProxy.host());
                    res.add("-Dhttp.proxyPort=" + httpProxy.port());
                    res.add("-Dhttps.proxyHost=" + httpProxy.host());
                    res.add("-Dhttps.proxyPort=" + httpProxy.port());

                    if (StringUtils.isNotBlank(httpProxy.username())) {
                        res.add("-Dhttp.proxyUser=" + httpProxy.username());
                        res.add("-Dhttp.proxyPassword=" + Objects.requireNonNullElse(httpProxy.password(), ""));
                        res.add("-Dhttps.proxyUser=" + httpProxy.username());
                        res.add("-Dhttps.proxyPassword=" + Objects.requireNonNullElse(httpProxy.password(), ""));
                    }
                } else if (options.getProxyOption() instanceof ProxyOption.Socks socksProxy) {
                    res.add("-DsocksProxyHost=" + socksProxy.host());
                    res.add("-DsocksProxyPort=" + socksProxy.port());

                    if (StringUtils.isNotBlank(socksProxy.username())) {
                        res.add("-Djava.net.socks.username=" + socksProxy.username());
                        res.add("-Djava.net.socks.password=" + Objects.requireNonNullElse(socksProxy.password(), ""));
                    }
                }
            }
  • 修复提交GP-5273: 优化游戏代理参数设置 (by Glavo)
  • 包含修复的版本:HMCL 3.11.0.321 及上游Dev版本

我已下载 3.11.0.321 开发版进行验证,生成的代理参数已恢复正常,在线游戏功能也恢复正常。

当前问题

虽然发布于 2026.01.223.11.0.321 版本已修复该问题,但 3.10 稳定分支(如发布于 2026.02.10 的最新版本 3.10.3)仍未包含此修复。由于新的稳定版尚未正式发布,用户可能仍在遭受此问题的困扰。

请求

鉴于该问题的严重性(据我调研,影响了相当多用户,可能导致在线游戏无法正常进行),我请求:

  1. 能否将此次修复 向后迁移到 3.10 分支,并发布一个紧急修复版本(如 3.10.4)?
  2. 如果 3.11.0 稳定版即将发布,能否告知预期时间,以便用户决定是否临时使用开发版?
  3. 若无法立即发布版本,能否提供手动修改配置或添加 JVM 参数的方法,让用户自行绕过此问题?

感谢开发者的辛勤工作,期待尽快解决此问题!

启动器崩溃报告 / 启动器日志文件 | Launcher Crash Report / Launcher Log File

服务端日志文件从L50开始为尝试加入服务器导致的服务端卡死。
2026-02-20-1-server.log
图:服务端无响应报错(日志局部)
Image

启动器日志文件在L161出现了错误的启动参数。
HMCL-3.10.3-Console-Export.log

请原谅我导出日志的时间不同,但日志记录的报错信息大致相同。(Orz)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions