プログラムから別のアプリケーションを起動するにはJavaTips 〜Javaプログラミング編

» 2007年02月20日 10時00分 公開
[平野正喜@IT]

 プログラムから既存のアプリケーションを起動したいとき、java.langパッケージRuntimeクラスにあるexecメソッドが使えます。

 例えば、Windowsにおいて、電卓メモ帳を立ち上げるプログラムは下の図1のようになります。

図1 電卓とメモ帳を立ち上げるプログラム(Windows用) 図1 電卓とメモ帳を立ち上げるプログラム(Windows用)

 Windowsのメモ帳(notepad.exe)は、実行パラメータとしてファイル名を指定すると、これを開いて起動しますので、この例では、「C:\a.txt」というファイルがあれば、これがメモ帳で開けます。

起動できるアプリケーションには制限がある

 このexecメソッドは、アプリケーションの実行プロセスを作成し、Processクラスのサブクラスのインスタンス(Processオブジェクト)を返します。

 ただし、特定のネイティブなプラットフォーム上の特殊なプロセスではうまく動作しない場合があります。例えば、

  • ネイティブなウィンドウ処理プロセス
  • デーモンプロセス
  • Win32環境でのWin16/DOSプロセス、MS-DOSプロンプトやコマンドプロンプト
  • UNIXやLinuxのシェルスクリプト

 などといったプロセスです。

 また、返されたProcessオブジェクトを用いて、アプリケーションの実行プロセスの制御や、プロセス情報の取得が行えます。

 1つ注意しておきたいのは、Processオブジェクトへの参照がなくなった場合でも、サブプロセスは終了されず、非同期的に実行を続けることです。

ウィンドウアプリに電卓起動メニューを

 もう1つのサンプルとして、swingを用いたウィンドウアプリケーションで、電卓を立ち上げるメニューを持つ単純なプログラムは下記のようになります。

図2 電卓起動メニューを持つウィンドウアプリ(Windows用) 図2 電卓起動メニューを持つウィンドウアプリ(Windows用)
図3 電卓起動メニューを持つウィンドウアプリの実行画面 図3 電卓起動メニューを持つウィンドウアプリの実行結果

 なお、この機能はアプレットからは利用できず、実行すると例外(AccessControlException)が発生します。

Profile

RunDog.org

平野正喜


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。