[Feature] 放弃对于 Java 8 的兼容性
描述 | 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 和游戏本体。
我们需要慎重地看待这个问题,在迁移时尽可能避免为用户带来困扰。
建议在#3683 落实前继续保留对Java 8的支持,由于更新UI规范可能需要对JavaFX用户界面进行大量调整,这是一个很好的契机抛弃支持
Minecraft 1.12 的部分整合包用户无法使用一个 Java 来运行 HMCL 和游戏本体。
感觉这个无解呀🤔
我觉得可以。 需要使用java8的可以用旧版本(给一个稳定旧版本的下载链接) 或者说单独分一个LTSC分支,只在重大错误(比如登陆方式出问题、安全问题)的时候更新,不再考虑游戏兼容性(比如启动新版本出错)。
我觉得可以。 需要使用java8的可以用旧版本(给一个稳定旧版本的下载链接) 或者说单独分一个LTSC分支,只在重大错误(比如登陆方式出问题、安全问题)的时候更新,不再考虑游戏兼容性(比如启动新版本出错)。
我觉得完全不值得付出这个维护成本。引导用户去下载旧版本 HMCL 并不比引导他们去下载 Java 11+ 简单。
之前尝试过不使用Java 8打开启动器,发现在1080P屏幕下的显示效果(包括字体和UI)有点过大了,这也是为什么我没放弃使用Java 8启动启动器的原因,不知道是否是因为技术原因,还是希望能优化一下。
之前尝试过不使用Java 8打开启动器,发现在1080P屏幕下的显示效果(包括字体和UI)有点过大了,这也是为什么我没放弃使用Java 8启动启动器的原因,不知道是否是因为技术原因,还是希望能优化一下。
有截图吗
之前尝试过不使用Java 8打开启动器,发现在1080P屏幕下的显示效果(包括字体和UI)有点过大了,这也是为什么我没放弃使用Java 8启动启动器的原因,不知道是否是因为技术原因,还是希望能优化一下。
有截图吗
这是默认的效果,如果需要合适的显示空间还需要再调大点。
参考 https://github.com/HMCL-dev/HMCL/discussions/3151 ,使用 -Dglass.gtk.uiScale 参数调节窗口缩放
是不是关错了?
- https://github.com/HMCL-dev/HMCL/issues/3846
HMCL 将彻底无法兼容 Windows XP 等旧平台。
这个问题可以考虑换 Linux 系统或考虑 FreeBSD。
Minecraft 1.12 的部分整合包用户无法使用一个 Java 来运行 HMCL 和游戏本体。
感觉这个无解呀🤔
不会还有人在玩1.7.10吧,不会吧不会吧(所以Java 8用哪家比较好呢)