我调用r.exec启动cmd提示后如何停止执行我的java程序

时间:2017-05-22 18:40:33

标签: java batch-file command prompt runtime.exec

在我正在使用的程序中 r.exec(); 启动命令提示符并在其中执行bat文件。

但是发生的事情是,一旦执行上述语句,cmd提示符就会启动并在其中执行bat文件。但是,java程序执行不会等到bat文件在提示符中执行,即。 它启动cmd提示&开始在其中执行bat文件并继续执行 r.exec(); 之后的下一个语句。(同时我的bat文件仍在提示中执行)

我的要求是,java程序必须等到执行命令提示符中的bat文件,而不是继续执行next语句。

2 个答案:

答案 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()。这将允许您在批处理文件运行时监视它,因此如果由于某种原因发生故障,您可以取消终止进程。