- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaプログラムから外部コマンドを呼び出す)
Javaプログラムから外部コマンドを実行する方法
このQ&Aのポイント
- Javaプログラムから外部コマンドを呼び出し実行する方法について解説します。
- 外部コマンドを実行する際に、投げたコマンドが終了するまで後の処理が行われない問題があります。
- バックグラウンド処理を行いたい場合、別の指定方法が存在するかどうかを教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Runtime#execによるコマンドの実行は、そもそも非同期に行われます。(同期するためにProcess#waitForというメソッドがあります) おそらく、Process#getInputStreamで得たInputStreamからすべて読み込もうとしているのではないでしょうか。だとすると、その時点で同期処理になってしまいます。 目的によるとは思いますが、別スレッドにして走らせてみてはどうでしょう。 new Thread() { public void run() { String com = "ls -l"; Process pro = Runtime.getRuntime().exec(com); // ... } }.start(); (例外処理省略)
お礼
>Runtime#execによるコマンドの実行は、そもそも非同期に行われます。 >おそらく、Process#getInputStreamで得たInputStreamからすべて読み込もうとしているのではないでしょうか。 >だとすると、その時点で同期処理になってしまいます。 質問を投げた後、プログラムの出力結果を受け取っていることに問題があるのでは???と思ったのですが、 確証もなかったので質問を取り消せなかったのです・・・。 確かにそのとおりで、その後出力結果を受け取らないように等、いろいろな事を行ってみた結果、うまく動作していました。 ご指摘、ありがとうございました。