- - PR -
外部コマンドが実行されない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-03-08 01:24
いつもお世話になっています。
外部コマンド(batファイル)を実行するテストを行っていたのですが、 エラーも何も出力されず、終了コードは返されます。 原因を調べていて以下のコードを試しましたが、 やはりエラーは出力されず、 終了コードは返されます。 実際にはdirコマンドの結果を出力することを期待しているのですが、何も出力されません。 これはエラーが起こっているわけではないのでしょうか? dirコマンドの結果が返されない理由は何でしょうか? public class TestRuntime { public static void main(String[] args) { try { // プロセスオブジェクトを生成 String[] cmdarray = {"command.com", "/c", "dir"}; Process process = Runtime.getRuntime().exec(cmdarray); // 外部コマンドの標準出力を取得するための入力ストリームを取得 InputStream is = process.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is); // 標準出力を1行づつ取り出します String line; while ((line = br.readLine()) != null) { System.out.println(line); } System.out.println(process.exitValue()); } catch (Exception e) { e.printStackTrace(); } } } 環境 Jdk:1.4.2_12 OS:WindowsXP | ||||
|
投稿日時: 2007-03-08 02:10
br.readLine() はプロセスが終了するまで待ってくれる保証があるのでしょうか?
プロセスが終了していないのに出力がないから終了したと判断してしまっているのではないでしょうか。 | ||||
|
投稿日時: 2007-03-08 07:44
インギさん、回答ありがとうございます。
以下に関してですが、br.readLineを行って、Windowsの"dir"の結果を取得したいのですが、実行すると何も取得できないまま終了してしまうわけです。 エラーにならないので、なぜ実行結果が返ってこないかが分かりません。 ちなみに、コマンド実行の後に process.waitFor();を入れてみても結果は変わりませんでした。
| ||||
|
投稿日時: 2007-03-08 09:04
dirの結果が欲しいなら、
new String[]{"cmd","/C","dir"}じゃないでしょうか。 | ||||
|
投稿日時: 2007-03-08 14:09
br.readLine()した時には、dirが既に終わってしまっているのだと思います。
バッチファイルに start /wait notepad dir とでも書いてこれをRuntime#exec()し、起動されるメモ帳を閉じてみるとどうでしょう。 | ||||
|
投稿日時: 2007-03-08 14:47
すでに回答されているので、補足ですが、
私の環境で実行すると16bitMSーDOSサブシステムというダイアログがでて、 アプリケーション環境の設定でエラーが発生しました。 と表示されます。command.com自体が動作しないで正常終了していると思われます。 16bitアプリは単純には動作しないので、一度command.com /C dir をコマンドで動かして、command.comが動作できる環境になってから問題のものを動作させるか、あるいはcommand.comをcmd.exeに変更するのだと思います。 |
1