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秒就会调用一次mytaskrun()方法。

 

并不保证定时器任务一定按时执行。各个定时器任务依次发生。如果其中一个任务需时很长,下一个任务只能在当前任务完成之后再执行。对于循环执行的任务,最好保证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

 

       

。。。。

 

}}}

 

 

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值