lovexyn0827
目前在写一个基于Swing的区块加载小地图,第一次测试中得到了HeadlessException。经排查,在net.minecraft.client.main.Main.main()方法最后有一个把java.awt.headless设为true的操作,于是就在Mod加载阶段把它又设回去了,后来测试时也未发现任何问题。但是,个人感觉这一段代码应该不是白写的,那么他的用意是什么,硬是给他设回去会不会造成一些奇怪的问题?

3TUSK
我假定你是在 1.16.5 或附近的版本上,因为我也找到了。

……但不是在 main 方法里,而是在 Main 类的静态初始化块(Static Initializer)里。

原因也很简单,因为技术原因,在有 lwjgl3 的环境里使用 AWT 会导致崩溃。
https://hub.jmonkeyengine.org/t/lwjgl-v2-versus-v3/42125/20

lovexyn0827
3TUSK 发表于 2021-8-11 02:10
我假定你是在 1.16.5 或附近的版本上,因为我也找到了。

……但不是在 main 方法里,而是在 Main 类的静态 ...

还真是在<clinit>方法中(1.16.4),是我记错了
这么说,现在的Mod是不兼容MacOS的,那解决方案是不是就只有改用JavaFX或OpenGL了。如果改用JavaFX,部分简化的JRE将不被支持;如果改用OpenGL,要么得编写大量本地代码实现要么依赖LWJGL的API从而放弃对物理服务端的支持。虽然可以在客户端改用OpenGL,并在服务端保持原来的方式不变,但这种不一致性个人又觉得不大好。问一下有没有合适的解决方案。

第一页 上一页 下一页 最后一页