これは私のコードは、Javaを介してWindowsでプロセスを開始する(と出力をうんざりする)です。どういうわけかruntime.execすぐにEOFを入力して送信しますか?
public static void main(String[] args) throws Exception {
String[] command = new String[3];
command[0] = "cmd";
command[1] = "/C";
command[2] = "test.exe";
final Process child = Runtime.getRuntime().exec(command);
new StreamGobbler(child.getInputStream(), "out").start();
new StreamGobbler(child.getErrorStream(), "err").start();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
child.getOutputStream()));
out.write("exit\r\n");
out.flush();
child.waitFor();
}
private static class StreamGobbler extends Thread {
private final InputStream inputStream;
private final String name;
public StreamGobbler(InputStream inputStream, String name) {
this.inputStream = inputStream;
this.name = name;
}
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
inputStream));
for (String s = in.readLine(); s != null; s = in.readLine()) {
System.out.println(name + ": " + s);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
質問(プロセス)のプログラムが(私は「実行」行PASステップの後に右のように)すぐにEOFが供給ので、実行時の直後にエラー(検出され、無効な)メッセージを投げています。 execが呼び出されます。私はこの問題を起こさずにコマンドプロンプトでこのプログラムを手動で実行することができますが、Windows上でctrl-zを送信することがこのメッセージの原因であることを確認しました。
誰でもこの原因が分かりますか?
問題がある場合は、cmd/c test.exeの代わりに直接 "test.exe"としてプロセスを実行しようとしましたが、そのときにinputStream経由で出力が見えません。/cを付けずにcmd.exeを実行すると、違いはありません。
ジムありがとう、それは私が必要としていたものです。プログラムがsortや他のcmdの行ユーティリティのようにstdinを処理しないように見えます。 – user1309154