在我正在使用的程序中 r.exec(); 启动命令提示符并在其中执行bat文件。
但是发生的事情是,一旦执行上述语句,cmd提示符就会启动并在其中执行bat文件。但是,java程序执行不会等到bat文件在提示符中执行,即。 它启动cmd提示&开始在其中执行bat文件并继续执行 r.exec(); 之后的下一个语句。(同时我的bat文件仍在提示中执行)
我的要求是,java程序必须等到执行命令提示符中的bat文件,而不是继续执行next语句。
答案 0 :(得分:0)
Runtime.exec
会返回Process
个实例。在该实例上,您可以调用waitFor()
等待进程完成。
此外,您需要处理Process.getErrorStream()
和Process.getOutputStream()
(通常在单独的线程中),以便在这些缓冲区填满时进程不会阻塞。带有ProcessBuilder
的{{1}}有一个方便的方法,无需一次处理两个流,也可以用于额外的线程。
答案 1 :(得分:0)
r.exec("command")
返回Process
。从这里你可以简单地说出以下内容:
Process process = r.exec("command here");
process.waitFor(); //Waits until process closes
waitFor()
方法将暂停当前线程,直到进程关闭。
Javadoc
waitFor()
:如果需要,导致当前线程等待,直到此Process对象表示的进程终止
此外,如果要捕获输入或向控制台发送命令,可以在单独的线程中使用process.getInputStream()
和process.getOutputStream()
。这将允许您在批处理文件运行时监视它,因此如果由于某种原因发生故障,您可以取消终止进程。