我从java中执行一个.exe文件,使用的是 流程建设者 阶级和 流程 类。解释一下我在做什么。
builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();
process.waitFor();
我只是想知道,"waitFor() "要等多久?它是在等待我的.exe被执行,还是在等待它的执行结束?
我的.exe是一个编译后的AutoIt-脚本。这意味着,可能会有一些交互,比如鼠标移动,这需要一些时间。所以我需要知道我的Java代码在调用.exe后是否继续执行,或者是否真的在等待它。
我想实现的是两个脚本的轮流执行,但我担心,我的Java代码在执行第二个脚本的同时,第一个脚本还在运行。我很高兴有任何想法。
你的当前执行线程将被阻塞在 process.waitFor()
直到进程终止(即执行结束)。来源 此处
同时注意,如果进程已经被终止:waitFor()不会被阻止。我不知道你在问题中写的代码是否就是你运行的代码......但你必须小心,每执行一次脚本都要重新创建一个新的Process实例(也就是说,不要在同一个Process上多次调用start:第一次执行后就不行了
此外,如果在 "命令 "中有输出,你应该通过以下方式读取标准输出和标准错误输出 stream(process.getErrorStream())
和 process.getInputStream())
.如果没有,且输出或错误输出为满,则 waitfor()
会被绞死。
它将等待处理完成。解决办法
1 使用isAlive()
2 使用waitFor(long timeout, TimeUnit unit)(只有1.8)