[Sun SPOT メモ] アイソレット(Isolate)間通信 (1) - main の引数として渡す。

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 の 出力ウィンドウ


子アイソレットにデータを受け渡すことができました ;-)

この方法が一番簡単ですね。

投稿されたコメント:

コメント
  • HTML文法 不許可
About

machida

Search

Archives
« 1月 2016
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
      
今日