- 相關(guān)推薦
關(guān)于TimerTask與Timer類的應(yīng)用
Timer類就像一個定時器,用于設(shè)置特定的時間或周期,來配合線程動作的執(zhí)行,但是只調(diào)用Timer無法執(zhí)行線程動作,必須配合另一個類TimerTask的方法才能使用。從示例6-13中可以發(fā)現(xiàn)Timer類與Thread類很相近。
public Timer ()
創(chuàng)建一個新的timer對象。
Timer屬于計時器類,Time建立后,需要調(diào)用schedule()方法來執(zhí)行計劃任務(wù),計劃調(diào)度的方法有許多運(yùn)用方式:
public void schedule (TimerTask task, long delay)
執(zhí)行任務(wù)前先等待一段時間。task代表要執(zhí)行的任務(wù),delay代表需要等待的時間,單位為毫秒(1000毫秒為1秒)。
public void schedule (TimerTask task,
Date time)
在指定的系統(tǒng)時間time之后開始執(zhí)行任務(wù)。
public void schedule (TimerTask task,
long delay,
long period)
延遲一段時間后開始執(zhí)行任務(wù),任務(wù)按照設(shè)定的周期執(zhí)行。傳入的參數(shù):delay為延遲時間,period為周期時間,單位均為毫秒。
public void schedule(TimerTask task,
Date firstTime,
long period)
在指定的時間后開始執(zhí)行任務(wù),任務(wù)按照設(shè)定的周期執(zhí)行。傳入的參數(shù):firstTime為指定等待時間,period為周期時間,單位都是毫秒。
public void scheduleAtFixedRate (TimerTask task,
long delay,
long period)
執(zhí)行任務(wù)內(nèi)容后,等待delay時間,再按照period周期時間繼續(xù)執(zhí)行任務(wù),單位都是毫秒。
public void scheduleAtFixedRate
(TimerTask task,
Date firstTime,
long period)
先等待一段時間firstTime,再執(zhí)行計劃任務(wù),然后按照period周期時間繼續(xù)執(zhí)行任務(wù),單位都是毫秒。
public void cancel()
停止timer計時。
有了Timer的各項調(diào)用方法,還不能直接執(zhí)行計劃任務(wù),需要跟TimerTask類共同運(yùn)用才能使計劃任務(wù)開始運(yùn)行。TimerTask所包含的相關(guān)方法如下:
public void TimerTask ()
創(chuàng)建一個新的TimerTask對象。
public abstract void run()
運(yùn)行計劃任務(wù)的工作內(nèi)容。
public void cancel()
中止TimerTask類的執(zhí)行流程,不再執(zhí)行所調(diào)度的工作內(nèi)容。
public void scheduleExcutionTime()
實(shí)際運(yùn)行計劃任務(wù)所用的時間。
示例6-13
/×
Timer和TimerTask類運(yùn)行計劃任務(wù)
×/
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:
//運(yùn)行計劃任務(wù)
actionView();
break;
}
}
public void paint(Graphics g)
{
g.setColor(0xFFFFFF);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0);
g.drawString("Timer線程動畫應(yīng)用", 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()
{
/×
安排一個計劃任務(wù)
運(yùn)行任務(wù)內(nèi)容:goCanvas()
delay時間:500毫秒
period周期:500毫秒
×/
timers.schedule(new goCanvas(), 500, 500);
}
//計劃任務(wù)程序內(nèi)容
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;
}
}
}
}
【說明】本線程使用計劃任務(wù)進(jìn)行,所達(dá)到的效果跟使用線程的方式是相同的。只是在計劃的內(nèi)容上有所不同,例如不需要sleep()暫停時間,而是由schedule控制暫停時間。
【TimerTask與Timer類的應(yīng)用】相關(guān)文章:
英語四級應(yīng)用類作文寫作技巧03-30
2016小升初數(shù)學(xué)?嫉4類應(yīng)用題01-23
2016考研英語:攻克高分作文之告示類應(yīng)用文03-19
2017中職類計算機(jī)應(yīng)用基礎(chǔ)試題「附答案」03-06
速錄介紹及應(yīng)用03-05
EDA技術(shù)與應(yīng)用03-31
草坪的景觀應(yīng)用03-13