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控制暂停时间 |