快速业务通道

J2ME:定时器(TimerTask)使用及初探 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

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

时间:2011-02-25

最近完成个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(); }

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

时间:2011-02-25

最后就是在你的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: //...... }}}

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

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号