国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 16:10:42
字體:
來源:轉載
供稿:網友

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

         //......

}}}

  整個的框架就是這樣了~我用這個開發的是麻將類游戲,并不是整個游戲的框架哦~當然線程在整個游戲中也是要用到的,這里就不多談了。有何意見請聯系我:


zxhwolfe@hotmaill.com

(出處:http://www.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 托克托县| 城固县| 筠连县| 南昌市| 象山县| 通州市| 宣化县| 平罗县| 古丈县| 三河市| 堆龙德庆县| 思南县| 方正县| 宁明县| 萨迦县| 平江县| 壤塘县| 崇礼县| 榆中县| 苗栗市| 同心县| 西充县| 丹江口市| 吉林省| 莱芜市| 闻喜县| 峨边| 迁西县| 贵阳市| 安丘市| 楚雄市| 塔河县| 洱源县| 吴桥县| 西乌| 八宿县| 泾阳县| 白水县| 抚宁县| 沙洋县| 民勤县|