程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME-定時器(TimerTask)使用及初探

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

編輯:J2ME

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

  整個的框架就是這樣了~我用這個開發的是麻將類游戲,並不是整個游戲的框架哦~當然線程在整個游戲中也是要用到的,這裡就不多談了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved