0
点赞
收藏
分享

微信扫一扫

j2me-定时器(timertask)使用及初探


首先,说下定时器的基本使用,以下内容摘自nokia 论坛里的一篇文章:

 

《为60系列平台设计java应用》--

定时器

 

 

各种定时器让各种应用能方便地规划任务,而不必对线程进行调配。使用线程通常需要更为复杂的设计,并需要更多的系统资源,对各种小设备而言,比较奢侈。

 

创建一个定时器的范例:

 

public class mytask extends timertask 


{


private int icount;


public mytask(int astart)


{


super();


icount = astart;


}


public void run()


{


icounter--;


system.out.println(“counter is now ” + icounter);


if (icounter == 0)


cancel();


}


}

 

 

构建一个定时器并向其中添加mytask:

 

mytask mytask = new mytask(50); 


timer mytimer = timer();


mytimer.schedule(mytask, 1000, 20000);

 

 

在这个范例中,每20秒就会调用一次mytask的run()方法。

 

并不保证定时器任务一定按时执行。各个定时器任务依次发生。如果其中一个任务需时很长,下一个任务只能在当前任务完成之后再执行。对于循环执行的任务,最好保证run()方法能很快完成。

 

一个以上地定时器也是可能的,这样就可以将任务分配到几个定时器上。然而,使用多定时器要多加小心,因为每个定时器只运行自己的线程,同步可能是需要的。

 


 

 

上面就是定时器的基本用法,对于一些简单的定时器操作这样做就可以了,直接把要执行的代码放入run中。对于逻辑结构复杂点的,需要多次执行run方法的时候就要另想办法来做了。下面是我使用定时器的一个框架,实际上就是个面向对象的应用,比较简单也好理解,希望对大家有个帮助,也希望有不同见解的朋友共同交流。

 

同样要有个类来继承timertask:

 

import java.util.timertask; 


public class gametask extends timertask {


private gameobject m_object;


public gametask(gameobject object) {


m_object = object;


}


public void run() {


m_object.gametask();


}


}


然后再定义一个gameobject接口:


public interface gameobject {


public abstract void gametask();


}


最后就是在你的canvas类中使用了
:

public class gamecanvas extends fullcanvas implements gameobject {



。。。。。。

private static timer m_timer;


private static byte runcase


public gamecanvas(mjmidlet midlet, whkrms whkrms) {



。。。。。。

}


public void gametask() {


switch (runcase) {


case 0:


aaagametask();


break;


case 1:


bbbgametask();


break;


case 2:


cccgametask();


break;


}


//
分别实现各个方法,也就是run里面要执行的东西,分情况来执行对应 的run。

public void bbbgametask() {


m_bflash = !m_bflash;


repaint();


m_timer.schedule(new gametask(this), 500l);


}





public void keypressed(int i) {


switch (runcase) {


case 1:


aaapressed(i);


break;


case 2:


bbbpressed(i);


break;


}


}


//
分别实现相应的按键pressed()方法,可以在其中设置runcase的值,来控制程序。当然也可在其他地方设置runcase来控制。

public void aaapressed
(int i){



if
(i==-7){


。。。。。。

m_timer.cancel();


runcase=2


repaint();


(new timer()).schedule(new gametask(this), 500l);


}}


public void paint(graphics g) {


switch (runcase) {


case 0:



。。。。

break


case 1



。。。。

case 2



。。。。

}}}

 

  整个的框架就是这样了~我用这个开发的是麻将类游戏,并不是整个游戏的框架哦~当然线程在整个游戏中也是要用到的,这里就不多谈了

 

 

 

举报

相关推荐

0 条评论