您可能希望在不同的线程上异步执行这些操作,并且您绝对不想忽略异常或错误流。
但最重要的是,您没有正确调用 cmd,因为通过执行“cmd /c start cmd.exe”,您正在进程中创建一个进程。
例如,
import java.io.*;
public class OpenCmd {
public static void main(String[] args) {
try {
// Process p = Runtime.getRuntime().exec("cmd /c start cmd.exe");
Process p = Runtime.getRuntime().exec("cmd.exe");
final BufferedReader inp = new BufferedReader(new InputStreamReader(
p.getInputStream()));
final BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
p.getOutputStream()));
final BufferedReader err = new BufferedReader(new InputStreamReader(
p.getErrorStream()));
new Thread(new Runnable() {
public void run() {
try {
out.append("sometext");
out.write("Some Text!\n\n");
out.flush();
out.write("Second Line...\n");
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
String line = "";
while ((line = inp.readLine()) != null) {
System.out.println("response1: " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
new Thread(new Runnable() {
public void run() {
try {
String line = "";
while ((line = err.readLine()) != null) {
System.err.println("err: " + line);
}
inp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
int exitVal = p.waitFor();
System.out.println("exitVal := " + exitVal);
} catch (IOException io) {
io.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}