※対応バージョン:Java 1.4

Java の標準 API を利用することで Java アプリケーションから別のアプリケーションを実行できます。

■別のアプリケーションの実行
Java 標準 API の Runtime オブジェクトを利用し、別のアプリケーションを実行します。Runtime.getRuntime() メソッドで、アプリケーションを実行するための Runtime オブジェクトを取得します。Runtime オブジェクトの exec() メソッドを実行すると、引数に指定したコマンドを実行し、コマンド上の別のアプリケーションを実行します。

String command = "xxx.exe args1 args2"; // コマンド(実行文)
Runtime runtime = Runtime.getRuntime(); // Runtime オブジェクト取得
Process process = runtime.exec(command); // コマンド実行

 
exec() メソッドを実行すると Java アプリケーションとは別のプロセスとして引数のコマンドが実行されます。別のプロセスとして実行されるため、Java アプリケーションとは平行に処理され、Java アプリケーションが終了しても処理は実行されています。通常、実行中のアプリケーション内で呼び出した別アプリケーションは、呼び出し元のアプリケーションで制御する必要が出てきます。

別アプリケーションの制御を行うためには exec() メソッドの戻り値として取得した Process オブジェクトを利用します。制御といっても実行した別アプリケーションが終了するのを待つこと、強制終了、標準出力・エラー出力・終了コードの取得くらいのことしかできません。

Process process = Runtime.getRuntime().exec(command); // コマンド実行
int exitValue = process.waitFor(); // 実行したプロセスが終了するまで待機
InputStream in = process.getInputStream(); // 標準出力オブジェクト取得

 
waitFor() メソッドで実行したアプリケーションが終了するまで呼び出し元のアプリケーションのスレッドを待機させ、終了したら終了コードを受け取り、処理を継続します。

標準出力は Process オブジェクトから InputStream オブジェクトを取得することで出力結果の参照が可能となります。

■サンプルプログラム
①標準出力と標準エラー出力をコンソールに出力 ExecCommand.zip
Java の実行ファイル ExecCommand.class と同じフォルダに ExecCommand.exe を配置し、オプションを指定して Java を実行すると結果を出力します。

>java ExecCommand -o
標準出力を出力します。

>java ExecCommand -e
標準エラー出力を出力します。

>java ExecCommand
Usage: ExecCommand option

where option include:
    -o      Output the stdout,and exit code is 0.
    -e      Output the stderr,and exit code is -1.

 
オプション
-o:標準出力でメッセージを表示
-e:標準エラー出力でメッセージを表示
それ以外:ヘルプを標準出力で表示

■関連する Java 標準 API
Java の標準 API を利用した別アプリケーションの実行はこのような流れとなります。以下に関係するメソッドの一覧を掲載します。詳細に関しては Java の標準 API ドキュメントを参考にしてください。

Runtime
Process exec (String command)
          指定された文字列コマンドを、独立したプロセスで実行します。
Process exec (String[] cmdarray)
          指定されたコマンドと引数を、独立したプロセスで実行します。
Process exec (String[] cmdarray, String[] envp)
          指定されたコマンドと引数を、指定された環境変数を持つ独立したプロセスで実行します。
static Runtime getRuntime ()
          現在の Java アプリケーションに関連した
Runtime オブジェクトを返します。 

Process
abstract  void destroy ()
          Process オブジェクトの表すプロセスを終了します。
abstract  int exitValue ()
          Process オブジェクトの表すプロセスの終了コードを返します。
abstract  InputStream getErrorStream ()
          Process オブジェクトの表すプロセスのエラーストリームを取得します。
abstract  InputStream getInputStream ()
          Process オブジェクトの表すプロセスの入力ストリームを取得します。
abstract  OutputStream getOutputStream ()
          Process オブジェクトの表すプロセスの出力ストリームを取得します。
abstract  int waitFor ()

          必要な場合に、この Process オブジェクトが表すプロセスが終了するまで現在のスレッドを待機させます。



5 Responses to “Java から別のアプリケーションを実行する”

  1. Excellent weblog here! Also your website loads up fast!

    What host are you the usage of? Can I get your affiliate link for
    your host? I want my site loaded up as quickly as yours lol

  2. If some one wants expert view about blogging and site-building after that i suggest him/her to
    pay a quick visit this blog, Keep up the nice job.

  3. porn より:

    Hi, yes this article is really pleasant and I have learned lot
    of things from it on the topic of blogging.
    thanks.

  4. porn より:

    Good information. Lucky me I discovered your site by chance (stumbleupon).
    I’ve book-marked it for later!

Leave a Reply

preload preload preload