当前位置: 首页 > news >正文

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

作者:zxhwolfe 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=899

最近完成个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秒就会调用一次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), <chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="500" unitname="l" w:st="on">500L</chmetcnv>);

}

public void keyPressed(int i) {

switch (runcase) {

case 1:

aaaPressed(i);

break;

case 2:

bbbPressed(i);

break;

}

}

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

Public void aaaPressedint i{

ifi==-7{

//.......

m_Timer.cancel();

runcase=2

repaint();

(new Timer()).schedule(new GAMETask(this), <chmetcnv tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="500" unitname="l" w:st="on">500L</chmetcnv>);

}}

public void paint(Graphics g) {

switch (runcase) {

case 0:

//......

Break

case 1

//......

case 2

//......

}}}

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

zxhwolfe@hotmaill.com

相关文章:

  • 深入学习之改变this的方法
  • 使用J2MEUnit测试J2ME程序
  • 深入学习之图片预加载 和 闭包新认知
  • NetBeans 4.0创建J2ME手机RSS阅读器
  • J2ME游戏 之 NORMAL-FRAME
  • 深入学习之git操作
  • 开发NokiaS40系列应用程序初级篇
  • 深入学习之重写call方法
  • 深入学习之this 方法1
  • 基于Nokia S40的猜数字游戏之一
  • 深入学习之继承图总结
  • 基于Nokia S40的猜数字游戏之二
  • 深入学习之 this 方法2
  • 应用Nokia UI API处理声音问题
  • 深入学习之css重点
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [数据结构]链表的实现在PHP中
  • angular学习第一篇-----环境搭建
  • Java程序员幽默爆笑锦集
  • JSONP原理
  • JS字符串转数字方法总结
  • Laravel 菜鸟晋级之路
  • Node项目之评分系统(二)- 数据库设计
  • Vue.js源码(2):初探List Rendering
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #{}和${}的区别是什么 -- java面试
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • (6)设计一个TimeMap
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (三)模仿学习-Action数据的模仿
  • (一)u-boot-nand.bin的下载
  • (原)Matlab的svmtrain和svmclassify
  • .jks文件(JAVA KeyStore)
  • .NET Core Web APi类库如何内嵌运行?
  • .Net FrameWork总结
  • .netcore 获取appsettings
  • .NET企业级应用架构设计系列之结尾篇
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • @SentinelResource详解
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [20160902]rm -rf的惨案.txt
  • [AIGC codze] Kafka 的 rebalance 机制
  • [AIGC] Redis基础命令集详细介绍
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [BUUCTF 2018]Online Tool
  • [IE技巧] 如何让IE 启动的时候不加载任何插件