Java调用外部应用程序都是通过“Runtime.getRuntime().exec()”来实现的。但是,因调用的内容不同,而需要额外处理的内容也不同。我就说一下调用BAT和SHELL的情况。
1.如何在Windows下调用BAT。
由于BAT脚本里的命令大部分是windows的内部命令,所以要能正常执行,必须要command.COM(Win95、Win98)或CMD.EXE(XP、NT)的支持。所以我们必须在Runtime.getRuntime().exec()执行的内容前增加“CMD.EXE /C”表示启动一个CMD的终端执行。
2.如何在Linux下调用SHELL。
如果直接在Linux下通过“Runtime.getRuntime().exec()”来执行命令,常常会遇到调用执行的进程无响应,出现这个原因是Linux终端执行的命令处于等待输入状态,所以外部调用的进程无响应。解决的办法就是将系统的标准输入一直打印出来。见下列代码:
// read buffer of parent process' input stream
final BufferedReader reader = new BufferedReader(
new InputStreamReader(System.in));
tIn = new Thread() {
public void run() {
try {
while (true) {
outputStream.write((reader.readLine() + "\n")
.getBytes());
outputStream.flush();
}
} catch