外部プログラムを起動するには

◆PROCESSING 逆引きリファレンス

 カテゴリー:制御系

外部プログラムを起動するには

【概要】

プログラムから、他の実行モジュール(外部プログラム)を起動したい事は無いでしょうか?

例えばPROCESSINGからブラウザーやメモ帳を呼び出すようなケースが考えられます。

PROCESSINGには、このようなときに使えるlaunch()命令とexec()命令があります。

またPROCESSINGはJavaをベースにした言語ですので、JavaのProcessBuilderクラスを利用する事も可能です。

 

【詳細】

launch()命令を使う

外部プログラムを呼び出すProcess p = launch( String args[] );

p:生成されたプロセス情報
args:起動コマンドとパラメータの配列

戻り値には、JavaのProcessクラスが戻されます。

普通に考えれば、戻されるProcessクラスの情報は「起動した外部プログラムの情報」になると思うのですが、launch命令では、そうではありません。

なぜならlaunch命令は、該当命令が実行されたOSごとに異なる方法で、argsに渡された内容を実行しようとするからです。具体的には、Windowsの場合はコマンドプロンプトへargsで指定された内容を引き渡すことで外部プログラムを起動します。

イメージとしては、「cmd /c args[0]の内容 args[1]の内容 args[2]の内容 …」です。

このため戻されるProcess情報はコマンドプロンプトの情報になります。よって戻されたProcess情報を使って、外部プログラムを制御する事ができません。

例えばlaunch命令実行後に、その外部プログラムが起動しているか調べたり、終了命令を送る事ができないので注意してください。

例えば上記は、C:¥Windowsにあるnotepad.exeを起動しています。

引数にC:¥temp¥hoge.txtを与えているので、メモ帳が開くと同時に指定したテキストファイルが表示されます。

 

exec()命令を使う

外部プログラムを呼び出すProcess p = exec( String args[] );

p:生成されたプロセス情報
args:起動コマンドとパラメータの配列

使い方はlaunch命令と同じです。戻り値には、JavaのProcessクラスが戻されます。

こちらはJavaのRuntime.getRuntime.exec(String[])と同じ動作をしますので、戻されるProcess情報は起動した外部プログラムのものになります。

Process情報を使うと、該当プログラムが起動しているかどうかがわかります。また該当プログラムを終了させることができます。

ただし本当に正確な情報が得られるかどうかや、終了するかどうかは外部プログラム次第です。例えばメモ帳(notepad.exe)や電卓(calc.exe)は制御できましたが、Chromeの場合は起動することはできても制御はできませんでした。

上記は、C:¥Windowsにあるnotepad.exeを起動しています。

引数にC:¥temp¥hoge.txtを与えているので、メモ帳が開くと同時に指定したテキストファイルが表示されます。その後マウスクリックを行うと、メモ帳が終了します。

 

ProcessBuilderを使う

呼び出す準備ProcessBuilder pb = new ProcessBuilder(List command);
rocessBuilder pb = new ProcessBuilder(String… command);

pb:生成されたProcessBuilder情報
command:起動コマンドとパラメータ

ProcessBuilderクラスを利用するには、起動したいプログラム名と引数を指定して、ProcessBuilder クラスのインスタンスを作成します。

起動したいプログラム名と引数はListで渡すことも可能ですし、Stringをカンマで区切って渡してもOKです。

例えば上記のような感じです。

上記例ではArrayListを使って、メモ帳と引数を指定しています。もちろんListを使わずにコメントにあるような記述でもOKです。
.

外部プログラムを呼び出すProcess p = pb.start();

pb:生成されたProcessBuilder情報
p:生成されたプロセス情報

起動するにはProcessBuilderクラスのstart()メソッドを利用します。成功すると、戻り値にはJavaのProcessクラスが戻されます。失敗すると IOException 例外が発生します。

上記は、C:¥Windowsにあるnotepad.exeを起動しています。

引数にC:¥temp¥hoge.txtを与えているので、メモ帳が開くと同時に指定したテキストファイルが表示されます。その後マウスクリックを行うと、メモ帳が終了します。

ProcessBuilderクラスには、この他にも

  • 外部プログラムの作業フォルダを指定する
  • 外部プログラムの標準入出力先を切り替える

といった、便利なメソッドが用意されています。詳しくは 公式ドキュメント を参照してください。

 

【関連記事】

  • なし

 


サンプルプログラム

外部プログラムを起動する例:

メインAP:

 

外部AP(サブAP):

PROCESSINGで作成したメインAPからJavaで作成した外部APを呼び出しています。
外部AP側で文字を入力し、OKボタンを押下すると、その内容がPROCESSING側に戻されて表示されます。

<出力サンプル>

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。