PCL2 icon indicating copy to clipboard operation
PCL2 copied to clipboard

在同时有多个 Java 进程时,自定义游戏窗口标题未正确地更改

Open alsk192837 opened this issue 1 year ago • 13 comments

检查项

描述

如果电脑上开了多个 Java 进程,并且在设置——游戏——启动选项——游戏窗口标题中输入内容,则启动器会错误地更改其他 Java 进程的标题内容,而不是游戏标题。 例如开启一个 IDEA 和一个 MC,则有时 IDEA 会被修改窗口标题,而 MC 进程仍为原名

image

image

原因

会影响我边打代码边摸鱼的效率(huaji

alsk192837 avatar Dec 30 '23 01:12 alsk192837

标签是不是应改为Bug()

Ad-closeNN avatar Dec 30 '23 03:12 Ad-closeNN

两个进程使用了同一个 java 吧 先把 label 改了,有人能帮忙确认一下吗

WorldHim avatar Dec 30 '23 06:12 WorldHim

无法处理,我没有找到任何可行的方法来区分不同的 java 窗口 :/ 如果大家有啥办法可以提……

LTCatt avatar Dec 30 '23 08:12 LTCatt

无法处理,我没有找到任何可行的方法来区分不同的 java 窗口 :/ 如果大家有啥办法可以提……

识别标题关键词?

WorldHim avatar Dec 30 '23 09:12 WorldHim

有办法从 Minecraft 的 PID 获取窗口 HWND 吗?

burningtnt avatar Dec 30 '23 09:12 burningtnt

有办法从 Minecraft 的 PID 获取窗口 HWND 吗?

这要知道打开游戏时运行了哪个进程吧

WorldHim avatar Dec 30 '23 10:12 WorldHim

这要知道打开游戏时运行了哪个进程吧

PCL2 能直接杀游戏进程,那应该是保存有 PID 信息的?

burningtnt avatar Dec 30 '23 10:12 burningtnt

PCL2 能直接杀游戏进程,那应该是保存有 PID 信息的?

好像会杀掉全部,见 #1223 所以这个问题应该实质上和 #1223 相同?

WorldHim avatar Dec 30 '23 10:12 WorldHim

好像是全部杀掉的,记得有一个 issue 就是关于这个

呃呃呃呃呃呃,那 ……

burningtnt avatar Dec 30 '23 10:12 burningtnt

Forge 的预启动窗口有很多种标题,并且 Mod 也会自定义窗口标题,所以从标题获取并不靠谱…… 启动的 PID 不一定是 MC 进程的 ID,有时候 Java 甚至 Mod 会自动拉起另一个 Java 来启动 MC……

LTCatt avatar Dec 31 '23 08:12 LTCatt

jps -v 然后对参数进行判断,同参数对 PID 大的那个重命名窗口标题(拉起 Java 最晚创建的进程 PID 通常大于其他进程)

wuliaodexiaoluo avatar Mar 19 '24 03:03 wuliaodexiaoluo

根据上述内容,在启动了一个 Minecraft 客户端和别的 Java 程序(下方例子为 IDEA)时 调用一个 jdk 安装目录/bin 中的 jps.exe 得到的反馈(只有 jdk 才有这个工具,应该不会有人一个 jdk 都没安装吧……)

C:\Users\m5604>E:\Java\jdk-17\bin\jps.exe -v
2624 Jps -Dapplication.home=E:\Java\jdk-17 -Xms8m -Djdk.module.main=jdk.jcmd
30052 JavaWrapper.jar -XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Djava.library.path=D:\MC-RIT-Season3\.minecraft\versions\RIT  模组端\RIT 模组端-natives -Djna.tmpdir=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Dorg.lwjgl.system.SharedLibraryExtractPath=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Dio.netty.native.workdir=D:\MC-RIT-Season3\.minecraft\versions\RIT 模组端\RIT 模组端-natives -Dminecraft.launcher.brand=PCL -Dminecraft.launcher.version=320 -DFabricMcEmu=net.minecraft.client.main.Main -Xmn256m -Xmx10342m -Dlog4j2.formatMsgNoLookups=true --add-exports=cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED -Doolloo.jlw.tmpdir=C:\Users\m5604\AppData\Roaming\PCL
32148  exit -XX:ErrorFile=C:\Users\m5604\\java_error_in_idea64_%p.log -XX:HeapDumpPath=C:\Users\m5604\\java_error_in_idea64.hprof -Xms128m -Xmx2048m -XX:ReservedCodeCacheSize=512m -XX:+UseG1GC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -XX:+IgnoreUnrecognizedVMOptions -XX:CompileCommand=exclude,com/intellij/openapi/vfs/impl/FilePartNodeRoot,trieDescend -ea -Dsun.io.useCanonCaches=false -Dsun.java2d.metal=true -Djbr.catch.SIGABRT=true -Djdk.http.auth.tunneling.disabledSchemes="" -Djdk.attach.allowAttachSelf=true -Djdk.module.illegalAccess.silent=true -Dkotlinx.coroutines.debug=off -Xmx4061m -Djb.vmOptionsFile=C:\Users\m5604\AppData\Roaming\\JetBrains\\IdeaIC2023.2\idea64.exe.vmoptions -Djava.system.class.loader=com.intellij.util.lang.PathClassLoader -Didea.vendor.name=JetBrains -Didea.paths.selector=IdeaIC2023.2 -Djna.boot.library.path=E:\IdeaCommunity/lib/jna/amd64 -Dpty4j.preferred.native.folder=E:\IdeaCommunity/lib/pty4j -Djna.nosys=true -Djn

根据启动参数确认是否为 PCL 启动的 Minecraft,然后对应 PID 拿 HWND,貌似就可以了? 需要确认在 有时候 Java 甚至 Mod 会自动拉起另一个 Java 来启动 MC 的情况下是否仍然可用 @LTCatt 研究研究?

MoYuan-CN avatar May 06 '24 05:05 MoYuan-CN

这玩意儿我搜的好像 JRE 没有……不过应该可以作为缓解 有空再看看吧 orz

LTCatt avatar May 06 '24 08:05 LTCatt

比较复杂,并且适用面很小,暂时不考虑 orz

LTCatt avatar Oct 14 '24 11:10 LTCatt