ProcessBuilder和Process.waitFor(),要等待多长时间?
问题内容:
我正在使用ProcessBuilder类和Process类从Java执行一个.exe文件。解释我在做什么:
builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();
process.waitFor();
我只是想知道,“ waitFor()”等待了多长时间?是等待直到执行我的.exe,还是等到执行完成?
我的.exe是编译好的AutoIt脚本。这意味着,可能需要一些时间才能完成诸如鼠标移动之类的交互。因此,我需要知道在调用.exe之后我的Java代码执行是否继续进行,或者它是否真的在等待它。
我想要实现的是轮流执行两个脚本,但是恐怕我的Java代码正在执行第二个脚本,而第一个脚本仍在运行。有没有人解决这个问题?我为任何想法感到高兴。
问题答案:
您当前的执行线程将被阻塞,process.waitFor()
直到进程终止(即执行完成)。来源在这里
还要注意,如果进程已经终止:waitFor()将不会被阻止。我不知道您在问题中输入的代码是否正是您在运行的代码…但是您必须小心并为脚本的每次执行重新创建一个新的Process实例(即,不只是多次调用start相同的过程:第一次执行后将无法运行)