入门-J2ME学习日记之-利用定时器类模拟MIDlet外部事件
作者:Snail
版权申明:可以转载,请保留作者信息和来源地址: 作者:Snail 地址:http://www.matrix.org.cn/resource/article/43/43851_J2ME.html
前面提到MIDlet程序本身可以通过调用notifyPaused()请求自己从活动状态进入暂停状态;调用notifyDestroyed()请求进入销毁状态;调用resumeRequest()请求恢复到活动状态。但是具体应该怎么使用呢?怎样通过程序本身模拟状态之间的转换呢?
这些都可以通过java.util包中的Timer 和TimerTask 类来实现。听说nokia的模拟器最接近真机,所以这次程序选择nokia s40 开发环境(唯一的不足就是不支持中文)。具体看如下演示程序:
import javax.microedition.midlet.MIDlet; import java.util.*; /* * 创建日期 2005-10-8 * * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */
/** * @author Snail * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */ public class MyTimerTask extends TimerTask { private MIDlet midlet;
/** * */ public MyTimerTask(MIDlet midlet) { // TODO 自动生成构造函数存根 System.out.println("MyTimerTask contructor"); this.midlet = midlet; } public void run(){ System.out.println("run() called"); midlet.resumeRequest(); }
}
import javax.microedition.midlet.MIDlet; import javax.microedition.lcdui.*; import java.util.*; import javax.microedition.midlet.MIDletStateChangeException; /* * 创建日期 2005-10-8 * * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */
/** * @author Snail * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */ public class MidletTest extends MIDlet implements CommandListener{ private Timer timer; private MyTimerTask mtk; private Command exit; /** * */ public MidletTest() { System.out.println("MidletTest Constructor"); //初始化Timer对象 timer = new Timer(); }
/* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#startApp() */ protected void startApp() throws MIDletStateChangeException { // TODO 自动生成方法存根 System.out.println("startApp Called"); exit = new Command("EXIT", Command.EXIT, 1); Form f = new Form("MidletTest"); String s = new String("I'll come back soon!"); f.append(s); f.addCommand(exit); f.setCommandListener(this); Display.getDisplay(this).setCurrent(f); try{ //画面停留4秒 即活动状态 时间为4秒 Thread.sleep(4000); }catch(Exception e){} System.out.println("Ready to paused"); try{ mtk = null; //获得当前Midlet基类的引用(向上转型) mtk = new MyTimerTask(this); //执行该任务等待 2秒 timer.schedule(mtk, 2000); //请求进入暂停状态 pauseApp(); notifyPaused(); }catch(Exception e){} }
/* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#pauseApp() */ protected void pauseApp() { // TODO 自动生成方法存根 System.out.println("pauseApp Called");
}
/* (非 Javadoc) * @see javax.microedition.midlet.MIDlet#destroyApp(boolean) */ protected void destroyApp(boolean arg0)throws MIDletStateChangeException { // TODO 自动生成方法存根 System.out.println("destroyApp Called:" + arg0); //停止Timer ,和TimerTask合同期满,脱离关系 timer.cancel();
} public void commandAction(Command c, Displayable d){ if(c == exit){ try{ destroyApp(false); notifyDestroyed(); }catch(MIDletStateChangeException e){} } }
}
通过上面程序可以看到, Timer必须配合TimerTask才能实现定时器功能。
上一篇:入门-J2ME学习日记之利用eclipse编写MIDlet
下一篇:深入理解SKIP_PAGE,EVAL_PAGE
|