gpt4 book ai didi

Java process.waitFor() 不返回

转载 作者:行者123 更新时间:2023-12-02 07:01:53 28 4
gpt4 key购买 nike

在 Windows 7 64 位上,运行 64 位 Java 1.7.0_17 ,下面显示的 p.waitFor() 永远不会返回。

String move_command="cmd.exe /c xcopy /Y /E "+x86_release+" "+path+"\\";
Process p;
p = Runtime.getRuntime().exec(move_command);
p.waitFor();

如果我使用 Windows 资源管理器,看起来所有文件都被复制了(相同的数量、相同的大小等)

如果我执行以下操作,waitFor() 会返回:

String move_command="cmd.exe /c move /Y "+x86_release+" "+path+"\\";
Process p;
p = Runtime.getRuntime().exec(move_command);
p.waitFor();

xcopymove 之间有什么不同,导致 waitFor() 无法返回,还是我走错了路完全吗?

最佳答案

xcopy 可能只是碰巧产生比 move 更多的输出,填满输出缓冲区并阻塞直到它被刷新。 Java 中的默认行为是将子进程的 stdout/stderr 通过管道传输到 InputStream 中,然后要求您以编程方式读取,以免子进程的缓冲区溢出。

如果是后者,解决方案很简单,事实上您应该这样做:使用 ProcessBuilder 准备系统调用并对其调用 inheritIO 。这将为子进程重用父进程的标准输入和标准输出。

附注,xcopy 是常规 .exe 文件,不需要包装到 cmd.exe/c 中。

关于Java process.waitFor() 不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546225/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com