• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaプログラムから外部コマンドを呼び出す)

Javaプログラムから外部コマンドを実行する方法

このQ&Aのポイント
  • Javaプログラムから外部コマンドを呼び出し実行する方法について解説します。
  • 外部コマンドを実行する際に、投げたコマンドが終了するまで後の処理が行われない問題があります。
  • バックグラウンド処理を行いたい場合、別の指定方法が存在するかどうかを教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mojimojio
  • ベストアンサー率51% (14/27)
回答No.1

Runtime#execによるコマンドの実行は、そもそも非同期に行われます。(同期するためにProcess#waitForというメソッドがあります) おそらく、Process#getInputStreamで得たInputStreamからすべて読み込もうとしているのではないでしょうか。だとすると、その時点で同期処理になってしまいます。 目的によるとは思いますが、別スレッドにして走らせてみてはどうでしょう。 new Thread() { public void run() { String com = "ls -l"; Process pro = Runtime.getRuntime().exec(com); // ... } }.start(); (例外処理省略)

staflo
質問者

お礼

>Runtime#execによるコマンドの実行は、そもそも非同期に行われます。 >おそらく、Process#getInputStreamで得たInputStreamからすべて読み込もうとしているのではないでしょうか。 >だとすると、その時点で同期処理になってしまいます。 質問を投げた後、プログラムの出力結果を受け取っていることに問題があるのでは???と思ったのですが、 確証もなかったので質問を取り消せなかったのです・・・。 確かにそのとおりで、その後出力結果を受け取らないように等、いろいろな事を行ってみた結果、うまく動作していました。 ご指摘、ありがとうございました。

関連するQ&A