我正在使用ProcessBuilder类和Process类从java执行.exe文件。解释我在做什么:
builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process process = builder.start();
process.waitFor();
我只是想知道,等待多长时间" waitFor()"等候?是等待我的.exe执行,还是等到执行结束?
我的.exe是一个已编译的AutoIt脚本。这意味着,可能会有像鼠标移动这样的交互,这需要一些时间。 因此,我需要知道在调用.exe之后我的Java代码执行是否继续,或者它是否真的在等待它。
我想要实现的是两个脚本的循环执行,但我担心,我的Java代码正在执行第二个脚本,而第一个脚本仍在运行。 有没有人解决这个问题?我很高兴有任何想法。
答案 0 :(得分:7)
您的当前执行线程将在process.waitFor()
被阻止,直到进程终止(即执行完成)。
来源here
另请注意,如果进程已终止:waitFor()将不会被阻止。我不知道你在问题中输入的代码是否正是你所运行的......但你必须小心并为每次执行脚本重新创建一个新的Process实例(即不仅仅是多次调用start相同的过程:首次执行后不起作用)
答案 1 :(得分:3)
此外,如果"命令"中有输出。您应该按stream(process.getErrorStream())
和process.getInputStream())
读取标准输出和标准错误输出。如果没有,输出或错误输出已满,waitfor()
将被挂起。
答案 2 :(得分:2)
它会等到过程结束。解决方法:
1使用isAlive()
2使用waitFor(长超时,TimeUnit单位)(仅1.8)