最简单的方法:你应该使用start
。设置工作目录也是可以的,看看下面这个例子:
Runtime r=Runtime.getRuntime();
r.exec("cmd.exe /c start compile.bat", //path to executable
null, // env vars, null means pass parent env
new File("C:\\blahblah")); // working directory
附加信息: 如果你不想启动的过程中它是单独的控制台(这是start
一样),你可以做r.exec("cmd.exe /c compile.bat");
,而是因为它执行它的上下文中的父控制台,你必须等待与p.waitFor()
或读它的输入流 - 否则它可能会默默地失败。从你 这将运行和显示输出命令:
Process p=r.exec("cmd.exe /c compile.bat", //path to executable
null, // env vars, null means pass parent env
new File("C:\\blahblah"));
InputStream is=p.getInputStream();
BufferedReader br= new BufferedReader(new InputStreamReader(is));
String line=new String();
while ((line=br.readLine())!=null) System.out.println (line);
同样如1.5的ProcessBuilder被优先停留的方式开始处理(从Java DOC):
java.lang.Process中
创造过程可能不适合某些本地平台,比如本地窗口 进程,守护进程特别 工艺做工精良的方法,Win16的/ DOS进程上Microsoft Windows, 或shell脚本。
默认情况下,创建的子进程没有自己的终端或 控制台。它的所有标准I/O(即标准输入,标准输出,标准错误)操作 将被重定向到父进程,可以通过使用方法getOutputStream(), getInputStream()和getErrorStream()获得的流访问 。 。父进程使用这些 流将输入提供给子进程并从子进程获取输出。由于 某些本机平台仅为标准的 输入和输出流提供有限的缓冲区大小,未能及时写入输入流 或读取子流程的输出流可能导致子流程 阻塞甚至死锁。
在需要时,子进程的I/O还可以使用的 所述的ProcessBuilder类方法重定向。
当没有对 过程对象的更多引用,而是子进程异步继续执行 时,子流程不会被终止。
并不要求由Process对象 表示的进程对拥有Process对象的Java 进程异步执行或同时执行。
作为1.5,ProcessBuilder.start()是创建一个 工艺的首选方式。
由于:JDK1.0
来源
2012-08-14 12:39:40
wmz
尝试:'调用Runtime.getRuntime()EXEC( “CMD/C C:\ blahblah \的compile.bat”)' – ig0774 2012-08-14 12:00:59
@ ig0774不要忘了逃脱\(在MrLore的回答中指出)即''C:\\ blahblah \\ compile.bat“' – 2012-08-14 12:46:49
@BrianJ:好点。那是在我喝咖啡之前。 – ig0774 2012-08-14 13:58:53