靜網PWA視頻評論

關於TimerTask與Timer類的應用

2024年01月05日

- txt下載

關於TimerTask與Timer類的應用
Timer類就像一個定時器,用於設置特定的時間或周期,來配合線程動作的執行,但是只調用Timer無法執行線程動作,必須配合另一個類TimerTask的方法才能使用。從示例6-13中可以發現Timer類與Thread類很相近。
public Timer ()
創建一個新的timer對象。
Timer屬於計時器類,Time建立後,需要調用schedule()方法來執行計劃任務,計劃調度的方法有許多運用方式:
public void schedule (TimerTask task, long delay)
執行任務前先等待一段時間。task代表要執行的任務,delay代表需要等待的時間,單位為毫秒(1000毫秒為1秒)。
public void schedule (TimerTask task,
Date time)
在指定的系統時間time之後開始執行任務。
public void schedule (TimerTask task,
long delay,
long period)
延遲一段時間後開始執行任務,任務按照設定的周期執行。傳入的.參數:delay為延遲時間,period為周期時間,單位均為毫秒。
public void schedule(TimerTask task,
Date firstTime,
long period)
在指定的時間後開始執行任務,任務按照設定的周期執行。傳入的參數:firstTime為指定等待時間,period為周期時間,單位都是毫秒。
public void scheduleAtFixedRate (TimerTask task,
long delay,
long period)
執行任務內容後,等待delay時間,再按照period周期時間繼續執行任務,單位都是毫秒。
public void scheduleAtFixedRate
(TimerTask task,
Date firstTime,
long period)
先等待一段時間firstTime,再執行計劃任務,然後按照period周期時間繼續執行任務,單位都是毫秒。
public void cancel()
停止timer計時。
有了Timer的各項調用方法,還不能直接執行計劃任務,需要跟TimerTask類共同運用才能使計劃任務開始運行。TimerTask所包含的相關方法如下:
public void TimerTask ()
創建一個新的TimerTask對象。
public abstract void run()
運行計劃任務的工作內容。
public void cancel()
中止TimerTask類的執行流程,不再執行所調度的工作內容。
public void scheduleExcutionTime()
實際運行計劃任務所用的時間。
示例6-13

Timer和TimerTask類運行計劃任務
×/
import javax.microedition.midlet.×;
import javax.microedition.lcdui.×;
import java.util.×;
public class threadDemo3 extends MIDlet
{
Display display;
canvasThread canvasthread;
public threadDemo3()
{
canvasthread=new canvasThread();
display=Display.getDisplay(this);
}
public void startApp()
{
display.setCurrent(canvasthread);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
public class canvasThread extends Canvas
{
int gameaction=0;
int view=0;
boolean again;
//聲明一個Tim er類
Timer timers;
Image[] cloudImage;
Image[] sunImage;
public canvasThread()
{
timers=new Timer();
try{
cloudImage = new Image[]{
Image.createImage("/cloud-1.png"),
Image.createImage("/cloud-2.png"),
Image.createImage("/cloud-3.png"),
Image.createImage("/cloud-4.png")
};
sunImage = new Image[]{
Image.createImage("/sun-1.png"),
Image.createImage("/sun-2.png"),
Image.createImage("/sun-3.png"),
Image.createImage("/sun-4.png")
};
}catch(Exception ex){}
}
public void keyPressed(int keyCode)
{
gameaction=getGameAction(keyCode);
switch(gameaction)
{
case FIRE:
//運行計劃任務
actionView();
break;
}
}
public void paint(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0);
g.drawString("Timer線程動畫應用", getWidth()/2, 20,
Graphics.HCENTER | Graphics.TOP);
g.drawImage(sunImage[view], getWidth()/2, 50, Graphics.HCENTER |
Graphics.TOP);
g.drawImage(cloudImage[view], getWidth()/2, 50, Graphics.HCENTER
| Graphics.TOP);
}
private void actionView()
{

安排一個計劃任務
運行任務內容:goCanvas()
delay時間:500毫秒
period周期:500毫秒
×/
timers.schedule(new goCanvas(), 500, 500);
}
//計劃任務程序內容
class goCanvas extends TimerTask
{
public void run()
{
repaint();
if(again)
view--;
else
view++;
if(again && view==0)
again=false;
if(!again && view==3)
again=true;
}
}
}
}
【說明】本線程使用計劃任務進行,所達到的效果跟使用線程的方式是相同的。只是在計劃的內容上有所不同,例如不需要sleep()暫停時間,而是由schedule控制暫停時間。

收藏

相關推薦

清純唯美圖片大全

字典網 - 試題庫 - 元問答 - 简体 - 頂部

Copyright © cnj8 All Rights Reserved.