HMCL icon indicating copy to clipboard operation
HMCL copied to clipboard

[Feature] 放弃对于 Java 8 的兼容性

Open Glavo opened this issue 9 months ago • 7 comments

描述 | Description

将运行 HMCL 所需的最低 Java 版本提升至 11(HMCL 依然能够使用 Java 8 启动 Minecraft)。

我们计划在今年 7 月发布 HMCL 稳定版 3.6.13,该版本将是最后一个支持使用 Java 8 运行的 HMCL 稳定版。

此后 HMCL 仍然会支持使用 Java 6~10 启动游戏,但需要安装 Java 11(或更高版本)才能启动 HMCL 本体。

原因 | Reason

长久以来,HMCL 一直保持着对于 Java 8 的兼容性。这使得 HMCL 拥有十分强大的兼容性,但也产生了巨大的维护成本。我们面临着以下问题:

  • JavaFX 8 已经终止维护,Oracle JDK 8u451 已经不再附带 JavaFX。 HMCL 无法在 Java 8 上下载 JavaFX,若用户使用未附带 JavaFX 的 Java 8 启动 HMCL,HMCL 只能报错和退出,造成不良的用户体验。近期已经有大量用户反馈相关问题。
  • JavaFX 8 和 JavaFX 9+ 有着巨大差异,同时兼容它们的维护成本很高。 JavaFX 9 将大量内部类移动至公共包,这更便于第三方开发者定制自己的控件,但也让代码同时兼容 JavaFX 8 和 9+ 变得十分困难,很多时候不得不使用 Multi-Release JAR 为 JavaFX 8 和 9+ 写两遍功能才能保证兼容。因为这个问题,JavaFX 社区基本放弃了对于 JavaFX 8 的兼容性,导致 HMCL 很难使用社区的生态,不得不自行 fork 和维护大量功能。 JavaFX 8 和 JavaFX 9+ 的行为也有着诸多变化,JavaFX 对于高分屏等功能支持更差,而且很多问题是 JavaFX 8 独有的(比如 #3740、#3869),其中一些会使程序发生崩溃且无法解决。这导致测试的时候必须考虑为 JavaFX 8 进行单独的测试,也显著提高了维护成本。
  • Java 8 与 Java 9+ 之间也存在诸多差异。比如 Java 8 处理系统代理的方式不同,很容易出现意外的错误。
  • Java 9+ 有着大量重要的新功能(比如 Stack-Walking API、ProcessHandle 等)。HMCL 需要通过 Multi-Release JAR 或反射来使用 Java 9+ 的功能,提高了使用这些功能的门槛,并增加了额外的维护和测试的成本。
  • Java/JavaFX 8 小版本之间也有大量变化,Java 8 的早期版本存在更多问题,DEBUG 这些问题需要付出大量成本。 举个例子:HMCL 实际上在很久以前已经破坏了与 JavaFX 8u40 前版本的兼容性,但这个问题直到近期才被我发现。
  • JDK 8 不支持堆收缩,可能会导致 HMCL 表现出类似内存泄露的状态(#938)。

由于玩家主流版本已经更新至 Minecraft 1.20+,游戏所要求的最低版本已经更新至 Java 17,所以我们可以考虑放弃 Java 8,转向更新的 Java 版本。

但放弃 Java 8 也会带来新的问题:

  • HMCL 将彻底无法兼容 Windows XP 等旧平台。
  • Minecraft 1.12 的部分整合包用户无法使用一个 Java 来运行 HMCL 和游戏本体。

我们需要慎重地看待这个问题,在迁移时尽可能避免为用户带来困扰。

Glavo avatar Mar 24 '25 17:03 Glavo

建议在#3683 落实前继续保留对Java 8的支持,由于更新UI规范可能需要对JavaFX用户界面进行大量调整,这是一个很好的契机抛弃支持

WhatDamon avatar Mar 28 '25 09:03 WhatDamon

Minecraft 1.12 的部分整合包用户无法使用一个 Java 来运行 HMCL 和游戏本体。

感觉这个无解呀🤔

zkitefly avatar Mar 28 '25 13:03 zkitefly

我觉得可以。 需要使用java8的可以用旧版本(给一个稳定旧版本的下载链接) 或者说单独分一个LTSC分支,只在重大错误(比如登陆方式出问题、安全问题)的时候更新,不再考虑游戏兼容性(比如启动新版本出错)。

wifi-left avatar Apr 19 '25 11:04 wifi-left

我觉得可以。 需要使用java8的可以用旧版本(给一个稳定旧版本的下载链接) 或者说单独分一个LTSC分支,只在重大错误(比如登陆方式出问题、安全问题)的时候更新,不再考虑游戏兼容性(比如启动新版本出错)。

我觉得完全不值得付出这个维护成本。引导用户去下载旧版本 HMCL 并不比引导他们去下载 Java 11+ 简单。

Glavo avatar Apr 20 '25 14:04 Glavo

之前尝试过不使用Java 8打开启动器,发现在1080P屏幕下的显示效果(包括字体和UI)有点过大了,这也是为什么我没放弃使用Java 8启动启动器的原因,不知道是否是因为技术原因,还是希望能优化一下。

AstroAbyss avatar Jun 01 '25 21:06 AstroAbyss

之前尝试过不使用Java 8打开启动器,发现在1080P屏幕下的显示效果(包括字体和UI)有点过大了,这也是为什么我没放弃使用Java 8启动启动器的原因,不知道是否是因为技术原因,还是希望能优化一下。

有截图吗

zkitefly avatar Jun 01 '25 23:06 zkitefly

之前尝试过不使用Java 8打开启动器,发现在1080P屏幕下的显示效果(包括字体和UI)有点过大了,这也是为什么我没放弃使用Java 8启动启动器的原因,不知道是否是因为技术原因,还是希望能优化一下。

有截图吗

这是默认的效果,如果需要合适的显示空间还需要再调大点。

Image

参考 https://github.com/HMCL-dev/HMCL/discussions/3151 ,使用 -Dglass.gtk.uiScale 参数调节窗口缩放

zkitefly avatar Jun 02 '25 10:06 zkitefly

是不是关错了?

  • https://github.com/HMCL-dev/HMCL/issues/3846

3gf8jv4dv avatar Jul 02 '25 15:07 3gf8jv4dv

HMCL 将彻底无法兼容 Windows XP 等旧平台。

这个问题可以考虑换 Linux 系统或考虑 FreeBSD。

AkarinLiu avatar Jul 05 '25 03:07 AkarinLiu

Minecraft 1.12 的部分整合包用户无法使用一个 Java 来运行 HMCL 和游戏本体。

感觉这个无解呀🤔

不会还有人在玩1.7.10吧,不会吧不会吧(所以Java 8用哪家比较好呢)

Firestar-Reimu avatar Aug 27 '25 07:08 Firestar-Reimu