Hex-Dragon / PCL2

Plain Craft Launcher(我的世界启动器 PCL)的源代码,为支持社区研究而公开。
https://afdian.com/a/LTCat
Other
2.44k stars 183 forks source link

特定编码、Java 下无法启动游戏 #4627

Open Ext1nguisher opened 3 weeks ago

Ext1nguisher commented 3 weeks ago

检查项

描述

pcl自动下载的java8启动1.8.9版本出现错误 我先下载了1.8.9版本,提示是否需要自动安装java8,选择是。 选择之后pcl显示下载java,约10秒后进度条走完,并没有出现窗口,minecraft崩溃。 崩溃窗口只显示“minecraft出现问题”,没有更详细的信息。 但是使用自己下载的java启动没有问题。

PCL 错误报告、日志与附件

错误报告-2024-8-29_12.54.14.zip

HMCL 启动脚本

No response

lactobionicAcid commented 3 weeks ago

请勿点进上一条回复的链接! @LTCatt @Light-Beacon

wuliaodexiaoluo commented 3 weeks ago

Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no jansi in java.library.path, C:\Users\小锟斤拷同学\AppData\Local\Temp\jansi-64-3854093697855057671.dll: Can't find dependent libraries]

网络问题导致的 Java 不完整,如果可能,请自备 Java

3496

Ext1nguisher commented 3 weeks ago

Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no jansi in java.library.path, C:\Users\小锟斤拷同学\AppData\Local\Temp\jansi-64-3854093697855057671.dll: Can't find dependent libraries]

网络问题导致的 Java 不完整,如果可能,请自备 Java #3496

但是我重新下载了很多次,并且手动下载的也不行了

3gf8jv4dv commented 3 weeks ago

Your log looks weird. Have you enabled the option Beta: Use Unicode UTF-8 for worldwide language support? If so, try turning this option off and restarting your PC.

wuliaodexiaoluo commented 3 weeks ago

但是我重新下载了很多次,并且手动下载的也不行了

请尝试新建一个不包含中文用户名的账户然后再次尝试启动,另外如果开启了 Beta:使用 UTF-8 提供全球解码支持,请关掉这个选项

hejiehao commented 3 weeks ago

控制面板 -- 时钟和区域 -- 区域 -- 管理 -- 更改系统区域设置 里面上面选中文(简体,中国),并且把下面那个勾去掉 Image

LTCatt commented 3 weeks ago

使用了 UTF8Encoding+UTF8EncodingSealed (65001) 代码页,很罕见。 报错是 jlw 的…… @00ll00 看看?

Ext1nguisher commented 3 weeks ago

对,这个utf-8是我开的,因为有个程序包依赖它才能工作。。。 除了把这个选项关掉还有别的选择吗?....... 影响这么严重吗?我还以为只有乱码问题呢

hejiehao commented 3 weeks ago

Use Java 21

wuliaodexiaoluo commented 3 weeks ago

对,这个utf-8是我开的,因为有个程序包依赖它才能工作。。。 除了把这个选项关掉还有别的选择吗?....... 影响这么严重吗?我还以为只有乱码问题呢

这会导致使用 GBK 936 代码页解析中文字符的应用程序全部炸掉,因为 UTF-8 和 GBK 的编码并不一致 如果不带 Mod 且版本支持的话可以用 Java 19+ 启动,这个问题是在 Java 19 被修复的 当然最好是关掉

JingHai-Lingyun commented 3 weeks ago

总感觉是 #4485 的副作用…… 那个 PR 把(部分?)活动代码页改成了 65001(执行 chcp 命令)

Ext1nguisher commented 3 weeks ago

这会导致使用 GBK 936 代码页解析中文字符的应用程序全部炸掉,因为 UTF-8 和 GBK 的编码并不一致 如果不带 Mod 且版本支持的话可以用 Java 19+ 启动,这个问题是在 Java 19 被修复的 当然最好是关掉

1.8.9应该只能使用java8的吧,还是19+也行?版本差太大了。 我可以逝世看

00ll00 commented 3 weeks ago

使用了 UTF8Encoding+UTF8EncodingSealed (65001) 代码页,很罕见。 报错是 jlw 的…… @00ll00 看看?

报错的原因是 jansi-64-3854093697855057671.dll 这个dll没找到,jlw 那里是因为调用真正的 main 函数时没做异常处理,所以 main 出异常后 jlw 跟着出个异常。

这个 dll 没找到可能是路径里的中文字符导致的,可以试试在启动参数里加上 -Djava.io.tmpdir=xxx 把 java 默认临时目录改到一个没有特殊符号的位置。

Ext1nguisher commented 3 weeks ago

这个 dll 没找到可能是路径里的中文字符导致的

但是我是d盘路径:D:\jdk\java8 没中文字符啊也。。。

wuliaodexiaoluo commented 3 weeks ago

但是我是d盘路径:D:\jdk\java8 没中文字符啊也。。。

是 jlw 的问题,加载目录是中文的,你可以导出并用记事本编辑启动脚本,按下 Ctrl+F 搜索 -Doolloo.jlw.tmpdir=,然后把=号后面的内容改成英文再运行启动试试看看会不会炸 就像这样 image

Ext1nguisher commented 3 weeks ago

但是我是d盘路径:D:\jdk\java8 没中文字符啊也。。。

是 jlw 的问题,加载目录是中文的,你可以导出并用记事本编辑启动脚本,按下 Ctrl+F 搜索 -Doolloo.jlw.tmpdir=,然后把=号后面的内容改成英文再运行启动试试看看会不会炸 就像这样 image

等号后面的东西本来就是英文的。。。。

00ll00 commented 3 weeks ago

这个 dll 没找到可能是路径里的中文字符导致的

但是我是d盘路径:D:\jdk\java8 没中文字符啊也。。。

是我没说明白 x]

我是指C:\Users\小锟斤拷同学\AppData\Local\Temp\这个路径,这个是系统默认的临时文件路径,也是 java 默认使用的临时文件路径。从报错来看是在把 dll 文件释放到这里然后加载的过程中找不到这个文件,有可能是没释放出来,或者是释放了找不到。使用-Djava.io.tmpdir=xxx这个 jvm 参数可以重新指定 java 使用的临时文件目录。

Ext1nguisher commented 3 weeks ago

这个 dll 没找到可能是路径里的中文字符导致的

但是我是d盘路径:D:\jdk\java8 没中文字符啊也。。。

是我没说明白 x]

我是指C:\Users\小锟斤拷同学\AppData\Local\Temp\这个路径,这个是系统默认的临时文件路径,也是 java 默认使用的临时文件路径。从报错来看是在把 dll 文件释放到这里然后加载的过程中找不到这个文件,有可能是没释放出来,或者是释放了找不到。使用-Djava.io.tmpdir=xxx这个 jvm 参数可以重新指定 java 使用的临时文件目录。

好,明白了。 谢谢大佬.

Ext1nguisher commented 3 weeks ago

@LTCatt 目前什么情况? 我测试了发现LatestLaunch文件中并没有-Djava.io.tmpdir=xxx的字段 @00ll00 image 但是我找到了一个类似的参数:-Doolloo.jlw.tmpdir, 可是其值为PCL的根目录...... 启动器内部修复有何进展吗?

hejiehao commented 3 weeks ago

自己加一个 -Djava.io.tmpdir=

Ext1nguisher commented 3 weeks ago

自己加一个 -Djava.io.tmpdir=

好的

Ext1nguisher commented 3 weeks ago

image 在我保持原样的情况下就出现错误了 改了之后还是错误 注: 我上一个启动的版本不是1.8.9,而是1.20.1

00ll00 commented 3 weeks ago

可以尝试在 PCL2 -> 设置 -> 游戏 -> 高级启动选项 -> JVM参数头 的末尾加上-Djava.io.tmpdir="D:\MineCraft\PlainCraft\PCL",注意不要换行,而是使用空格和前面的内容隔开。修改后直接使用PCL启动游戏。

Ext1nguisher commented 3 weeks ago

可以尝试在 PCL2 -> 设置 -> 游戏 -> 高级启动选项 -> JVM参数头 的末尾加上-Djava.io.tmpdir="D:\MineCraft\PlainCraft\PCL",注意不要换行,而是使用空格和前面的内容隔开。修改后直接使用PCL启动游戏。

好的

allMagicNB commented 3 weeks ago

……就不能用 HMCL 启动看看?

HomoobyDX commented 3 weeks ago

他已经勾选了用HMCL启动没有问题,证明提交者已经尝试过了,属于PCL这边的问题

allMagicNB commented 3 weeks ago

他已经勾选了用HMCL启动没有问题,证明提交者已经尝试过了,属于PCL这边的问题

那是必填项,不填不能开 Issue。而且启动脚本也没有啊?

Ext1nguisher commented 2 weeks ago

我已经验证过了,请 @allMagicNB 不要再说了 HMCL启动脚本我懒得导出

allMagicNB commented 2 weeks ago

请导出它。

Ext1nguisher commented 1 week ago

请导出它。

国庆再说 :P 开学之后没时间

LTCatt commented 5 days ago

编辑:没事了,是 #4700,不是这个 issue

LTCatt commented 5 days ago

可以尝试在 PCL2 -> 设置 -> 游戏 -> 高级启动选项 -> JVM参数头 的末尾加上-Djava.io.tmpdir="D:\MineCraft\PlainCraft\PCL",注意不要换行,而是使用空格和前面的内容隔开。修改后直接使用PCL启动游戏。

好的

尝试之后有用么?

Ext1nguisher commented 4 days ago

有用,已经好了sorry刚看到 但是有点灵异

LTCatt commented 4 days ago

额,所以是怎么了?

Ext1nguisher commented 4 days ago

一会有用一会没用 研究了一下,似乎和游戏语言有些关系