Shuichi Machida's Weblog

« [Sun SPOT メモ] アイソレット... | メイン | [Sun SPOT メモ] アイソレット... »

http://blogs.sun.com/machida/date/20080328 2008年 3月 28日 金曜日

[Sun SPOT メモ] アイソレット(Isolate)間通信 (2) - プロパティ(Properties)で渡す。

アイソレット(Isolate)間通信に関するメモの続きです。

今回は、2つ目の方法である プロパティ(Properties)による値の引渡しについて紹介します。

以下は、Sun SPOT起動時に実行されるメインのアイソレット(MIDlet)です。ここでは、子アイソレットに渡すデータを格納した Propertiesクラスのインスタンスを、Isolateのコンストラクタに渡しています。また、インスタンスの生成後、setProperty メソッドを呼び出して子アイソレットに2つめのデータを渡しています。

package org.sunspotworld;

import com.sun.spot.util.*;
import com.sun.squawk.Isolate;
import com.sun.squawk.VM;
import java.util.Hashtable;
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 Hashtable props = new Hashtable();
        props.put("props1", "Hello" );

        try {
            Isolate isolate = new Isolate(
                    props,  // 子アイソレットに引き渡すプロパティ
                    "org.sunspotworld.ChildIsolate",  // 実行する子アイソレット
                    new String[0],
                    null, VM.getCurrentIsolate().getParentSuiteSourceURI() );

            // さらに、 Isolate の setProperty 呼び出しにより
            // 子アイソレットにデータを渡す
            isolate.setProperty("props2", "Duke" );
            
            // 子アイソレットをスタートし、終了するまで待機            
            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;

import com.sun.squawk.Isolate;

public class ChildIsolate {
    public static void main(String[] args) {
        System.out.println("ChildIsolate: Begin." );
        
        Isolate isolate = Isolate.currentIsolate();
        String props1 = isolate.getProperty("props1" );
        String props2 = isolate.getProperty("props2" );        

        
        System.out.println("props1: " + props1);
        System.out.println("props2: " + props2);
        System.out.println("ChildIsolate: End." );
    }
}

 

アプリケーション配備後、NetBeans IDEから起動すると、出力ウィンドウに以下のように表示されました ;-)


setProperty を使うとアイソレットを一度生成したあと、後から値を追加できるので main の引数による受け渡しより便利ですね。

投稿されたコメント:

コメント
  • HTML文法 不許可

Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.