Runtime クラス

[内容]

  Java アプリケーションはすべて,Runtime クラスの単一のインスタンスを持ちます.このクラスは,アプリケーションとアプリケーション実行環境とのインタフェースになります.現在の実行時オブジェクトは,getRuntime メソッドにより取得できます.

[主なメソッド]

[使用例]

  1. プログラム例では,「 ls -l 」コマンドを実行し,その結果をファイル temp.txt に出力し,かつ,作成したファイルの内容を画面に出力します.本来,リダイレクト機能を使用して,「 ls -l > temp.txt 」コマンドを実行したいところですが,実行できません.

      なお,Process クラスは,抽象クラスであり,以下のようなメソッドを持っています.

    • public abstract void destroy()
      サブプロセスを終了
    • public abstract InputStream getErrorStream()
      サブプロセスのエラーストリームを取得する.ストリームは,この Process オブジェクトが表すプロセスのエラー出力ストリームから渡されたデータを取得する.
    • public abstract InputStream getInputStream()
      サブプロセスの入力ストリームを取得する.ストリームは,この Process オブジェクトが表すプロセスの標準出力ストリームから渡されたデータを取得する.
    • public abstract OutputStream getOutputStream()
      サブプロセスの出力ストリームを取得する.ストリームへの出力は,この Process オブジェクトが表すプロセスの標準入力ストリームに渡される.
    • public abstract int waitFor() throws InterruptedException
      サブプロセスが終了するまで現在のスレッドを待機させる.

  2. Java において,他言語で書かれたプログラムを実行したいような場合があります.それらのプログラムを Java に変換する方法が理想的ですが,言語固有の機能を使用している場合,非常に大きなプログラムである場合など,必ずしもそのようにはいきません.一つの方法として,JNI( Java Native Interface )を利用する方法がありますが,多少面倒な手続きが必要です.

      そこで,他言語で書かれたプログラムを Java プログラムから頻繁に呼び出さないような場合(実行速度が問題にならない場合)は,以下に述べるように,Runtime クラスと Process クラスを利用することによって簡単に実行できます.ここでは,2つのデータを読み込み,それらの和と差を計算し,その結果を出力する FORTRAN のプログラムを実行する場合について説明しますが,他の言語の場合も基本的に同じです.なお,入力データは Java プログラムから与え,結果も Java プログラムが受け取るものとします.

    • プログラム例( Java と FORTRAN のプログラム)では,FORTRAN プログラムを実行する際に必要なデータを Java プログラムがファイル「I_FILE」に出力し,FORTRAN プログラムはそのファイルからデータを読み込み,結果をファイル「O_FILE」に出力しています.その後,Java プログラムは,そのファイルから結果を読み込んでいます.

    • プログラム例( Java と FORTRAN のプログラム)では,FORTRAN プログラムを実行する際に必要なデータを Java プログラムがファイル「I_FILE」に出力し,FORTRAN プログラムはそのファイルからデータを読み込み,結果を Process クラスの getInputStream メソッドを利用して Java プログラムに渡しています.

    • プログラム例( Java と FORTRAN のプログラム)では,FORTRAN プログラムを実行する際に必要なデータを Process クラスの getOutputStream メソッドを利用して Java から FORTRAN プログラムに渡し,FORTRAN プログラムはそのデータに基づき計算し,結果を Process クラスの getInputStream メソッドを利用して Java プログラムに渡しています.

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引