Xletを自己終了するサンプルコード。
本サンプルコードでは、被制御Xlet(Main)がnotifyDestroyed()を呼び出し自己終了し、制御Xlet(Monitor)はそれを検知し被制御Xletを再起動するため、被制御Xletの起動と終了が繰り返されることになる。
なお、BD-J Object fileの設定は同一Title内で別Xletを起動する場合の設定を使用。
なお、BD-J Object fileの設定は同一Title内で別Xletを起動する場合の設定を使用。
Main.java(非制御側)
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main implements Xlet{
XletContext xc = null;
public void initXlet(XletContext context){
try {
xc = context;
} catch (Throwable thr){
}
}
public void startXlet(){
try{
Thread.sleep(1000);
} catch(Throwable t){
}
xc.notifyDestroyed();
}
public void pauseXlet(){
}
public void destroyXlet(boolean unconditional){
}
}
Monitor.java(制御側)
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.dvb.application.AppID;
import org.dvb.application.AppProxy;
import org.dvb.application.AppStateChangeEvent;
import org.dvb.application.AppStateChangeEventListener;
import org.dvb.application.AppsDatabase;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Monitor implements Xlet, AppStateChangeEventListener {
int x=100, y=100;
Graphics g = null;
AppProxy ap = null;
public void initXlet(XletContext context){
try {
Font font = new Font(null, java.awt.Font.BOLD, 48);
HScene hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
hs.setFont(font);
hs.setVisible(true);
g = hs.getGraphics();
g.setColor(Color.white);
AppsDatabase ad = AppsDatabase.getAppsDatabase();
ap = ad.getAppProxy(new AppID(0x7fff0001, 0x4001));
ap.addAppStateChangeEventListener(this);
ap.start();
} catch (Throwable thr){
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){}
// AppStateChangeEventListnerを実装
public void stateChange(AppStateChangeEvent arg0) {
switch ( arg0.getToState() ){
case AppProxy.STARTED:
g.drawString("Started", x, y); y+=50;
break;
case AppProxy.DESTROYED:
g.drawString("Destroyed", x, y); y+=50;
ap.start();
break;
default:
}
y+=50;
}
}
関連する項目
- Xlet, Xletのライフサイクル: Xletおよびそのライフサイクルに関する説明
- Xletの制御とXlet状態遷移イベントの取得: BD-J Object fileの設定を参照