- - PR -
Javaからexe実行
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-07-02 13:23
こんにちは。
JDK 1.5.2 Javaからexeを実行したいのですが、exeファイルの終了も捕まえたいと思っております。 過去の記事で、プロンプトから実行させ、process.waitFor()で終了を 確認するとありましたが、MAXまで行ったら、Java側では次の処理に スキップする事もあると言われました。 そこで、ReadBufferで確認すれば大丈夫と言われたのですが、そもそも ReadBufferでwhileで回すと言う事はどういうことでしょうか? 起動したいexeファイル自体に終了ステータスとして、処理終了時にメッセージが 出力されるのですが、ReadBufferは処理の終了ですよね・・? 処理終了の出力パラメータはどのように取得するのでしょうか? 概念がまだ掴めていないのですが・・。 お聞かせいただければ幸いです、よろしくお願いします。 | ||||||||
|
投稿日時: 2008-07-02 14:08
MAXって何のMAXを差しているのでしょうか・・・ サブプロセスがエラー出力もしくは標準出力へ何かを書き出すと、 Javaのプロセスによって読み出すまでバッファリングされます。 バッファが一杯になると書き出す側が書けなくなり、 バッファが空くまで書き出しがブロックされます。 つまりサブプロセスはバッファに書き出せるまで、 終了しない状態になります。 Javaのプロセスがバッファからの読み出しを行わずに、 Process#waitFor()を呼び出してしまった場合、 バッファへの書き出しでブロックしているサブプロセスの終了を、 待ち続けている状態になります。これをデッドロックといいます。 したがって、サブプロセスの標準出力とエラー出力のバッファが、 常に空いているような状態になるようにプログラムを書く必要が有ります。 そこで、Process#getErrorStream()とProcess#getOutputStream()で、 サブプロセスの出力から読み出す必要が有ります。 この説明は、APIドキュメントに書いてありますので、 熟読された方がよいかと思います。
メッセージとはなんでしょうか。 標準出力に終了を示すメッセージを出力しているということでしょうか。 それならサブプロセスの標準出力から読み出せばよいのではないでしょうか。 | ||||||||
|
投稿日時: 2008-07-02 14:23
サンプルをどうぞ。当然、"Listing 4.5 GoodWindowsExec.java"です。 http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=3 | ||||||||
|
投稿日時: 2008-07-04 21:20
返信が遅れて申し訳ありません。
ご紹介いただきありがとうございます。 実現できました。 また、かつのりさんの説明でよく分かりました。 丁寧にありがとうございました。 また、色々質問すると思いますが、よろしくお願いします。 |
1