J2ME-定时器(TimerTask)使用及初探

最近完成个J2ME游戏,一直以来总想写点东西给大家~因为以前总是在索取,现在把J2ME的入门知识-定时器的相关知识以及我的一点体会-付出给大家,内容不多只是它的使用,希望对入门的J2ME开发者有所帮助。

  首先,说下定时器的基本使用,以下内容摘自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:

  //......

  }}}

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

  zxhwolfe@hotmaill.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值