熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

TimerTask與Timer類的應用

2013-11-23 19:10:01  來源: Java核心技術 

  Timer類就像一個定時器用於設置特定的時間或周期來配合線程動作的執行但是只調用Timer無法執行線程動作必須配合另一個類TimerTask的方法才能使用從示例中可以發現Timer類與Thread類很相近

  public Timer ()

  創建一個新的timer對象

  Timer屬於計時器類Time建立後需要調用schedule()方法來執行計劃任務計劃調度的方法有許多運用方式

  public void schedule (TimerTask task long delay)

  執行任務前先等待一段時間task代表要執行的任務delay代表需要等待的時間單位為毫秒(毫秒為秒)

  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()

  實際運行計劃任務所用的時間

  示例

  /×

  Timer和TimerTask類運行計劃任務

  ×/

  import javaxmicroeditionmidlet×;

  import javaxmicroeditionlcdui×;

  import javautil×;

  public class threadDemo extends MIDlet

  {

  Display display;

  canvasThread canvasthread;

  public threadDemo()

  {

  canvasthread=new canvasThread();

  display=DisplaygetDisplay(this);

  }

  public void startApp()

  {

  displaysetCurrent(canvasthread);

  }

  public void pauseApp(){}

  public void destroyApp(boolean unconditional){}

  public class canvasThread extends Canvas

  {

  int     gameaction=;

  int     view=;

  boolean again;

  //聲明一個Tim er類

  Timer   timers;

  Image[] cloudImage;

  Image[] sunImage;

  public canvasThread()

  {

  timers=new Timer();

  try{

  cloudImage = new Image[]{

  ImagecreateImage(/cloudpng)

  ImagecreateImage(/cloudpng)

  ImagecreateImage(/cloudpng)

  ImagecreateImage(/cloudpng)

  };

  sunImage = new Image[]{

  ImagecreateImage(/sunpng)

  ImagecreateImage(/sunpng)

  ImagecreateImage(/sunpng)

  ImagecreateImage(/sunpng)

  };

  }catch(Exception ex){}

  }

  public void keyPressed(int keyCode)

  {

  gameaction=getGameAction(keyCode);

  switch(gameaction)

  {

  case FIRE:

  //運行計劃任務

  actionView();

  break;

  }

  }

  public void paint(Graphics g)

  {

  gsetColor(xFFFFFF);

  gfillRect( getWidth() getHeight());

  gsetColor();

  gdrawString(Timer線程動畫應用 getWidth()/

  GraphicsHCENTER | GraphicsTOP);

  gdrawImage(sunImage[view] getWidth()/ GraphicsHCENTER |

  GraphicsTOP);

  gdrawImage(cloudImage[view] getWidth()/ GraphicsHCENTER

  | GraphicsTOP);

  }

  private void actionView()

  {

  /×

  安排一個計劃任務

  運行任務內容goCanvas()

  delay時間毫秒

  period周期毫秒

  ×/

  timersschedule(new goCanvas() );

  }

  //計劃任務程序內容

  class goCanvas extends TimerTask

  {

  public void run()

  {

  repaint();

  if(again)

  view;

  else

  view++;

  if(again && view==)

  again=false;

  if(!again && view==)

  again=true;

  }

  }

  }

  }

  【說明】本線程使用計劃任務進行所達到的效果跟使用線程的方式是相同的只是在計劃的內容上有所不同例如不需要sleep()暫停時間而是由schedule控制暫停時間


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26390.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.