网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > JSP > 正文
J2ME-定时器(TimerTask)使用及初探
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/11/29
下载{$ArticleTitle}原创论文样式

  最近完成个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:
//......
}}}

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

(责任编辑:admin)

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号