[Sun SPOT メモ] アイソレット(Isolate)間通信 (1) - main の引数として渡す。
By machida on 3 28, 2008
JukeBox デモを作っていて、アイソレット間でデータを受け渡す方法(Inter-Isolate Communication)について検討する必要があったので、忘れないようにメモしておきます。
アイソレット間通信については Isolate (Sun SPOT API V3.0) に詳しく記載されていますが、基本的にアイソレット間でデータを受け渡す方法としては、
- 子アイソレット起動時の main メソッドへの引数による引渡し
- プロパティ(Properties)による引渡し
- Channel、ServerChannel によるデータ通信
の3つがあります。
今回は、このうち main メソッドの引数による引渡しについて簡単に紹介します。
下のソースコードは、Sun SPOT起動時に実行されるメインのアイソレット(MIDlet)です。このクラスでは、"Hello"、"Duke" を引数に渡して子アイソレットを生成して実行します。
package org.sunspotworld; import com.sun.spot.util.\*; import com.sun.squawk.Isolate; import com.sun.squawk.VM; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class IICTestSpot extends MIDlet { protected void startApp() throws MIDletStateChangeException { new BootloaderListener().start(); // monitor the USB (if connected) and recognize commands from host System.out.println("IICTestSpot: Begin." ); // 子アイソレットに渡すデータを用意 final String[] args = {"Hello", "Duke"}; try { Isolate isolate = new Isolate( "org.sunspotworld.ChildIsolate", // 実行する子アイソレット args, // 子アイソレットに引き渡すデータ null, VM.getCurrentIsolate().getParentSuiteSourceURI() ); // 子アイソレットをスタートし、終了するまで待機 isolate.start(); isolate.join(); } catch (Exception ex) { ex.printStackTrace(); } System.out.println("IICTestSpot: End." ); while (true) { Utils.sleep(2000L); } } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { } } |
子アイソレットはmainメソッドを持ったクラスで、ここでは単純に受け取った値を表示しています。
package org.sunspotworld; public class ChildIsolate { public static void main(String[] args) { System.out.println("ChildIsolate: Begin." ); for (int i = 0; i < args.length; i++) { System.out.println(" args[" + i + "]: " + args[i]); } System.out.println("ChildIsolate: End." ); } } |
Sun SPOTをホストPCに接続して上記のアプリケーションを配備後、NetBeans IDE から起動します。
# NetBeans IDE の 出力ウィンドウ
子アイソレットにデータを受け渡すことができました
この方法が一番簡単ですね。