下载源码和示例 1 原理:启动一个线程来刷时间,缺点是不太精确,可能跟线程的优先级有关系。 会有0-10ms的误差。精确到0.1s是没有问题的。 package timer; public class Timer ... { private long interval; // private boolean enabled; private Task task; private Clock clock; public Timer(long _interval, Task _task) ...{ super(); this.interval = _interval; // this.enabled = enabled; this.task = _task; clock = new Clock(); clock.start(); new Thread(new Runnable() ...{ public void run() ...{ boolean b = true; while (b) ...{ //System.out.println(clock.getCurrTime()); if (interval <= clock.getCurrTime()) ...{ System.out.println(clock.getCurrTime()); task.doit(); clock.setCurrTime(0); //clock.stop(); //System.out.println(clock.getCurrTime()); //b = false; } } } }).start(); } public Task getTask() ...{ return task; } public long getInterval() ...{ return interval; } // public boolean isEnabled() { // return enabled; // } // public void setEnabled(boolean enabled) { // this.enabled = enabled; // }} package timer; public class Clock extends Thread ... { private long oldTime; private long currTime; public Clock() ...{ oldTime = System.currentTimeMillis(); currTime = 0; } public long getCurrTime() ...{ return currTime; } @Override public void run() ...{ while (true) ...{ currTime = System.currentTimeMillis() - oldTime; } } public void setCurrTime(long currTime) ...{ this.currTime = currTime; }} package timer; public interface Task ... { void doit();} package timer; public class NewTask implements Task ... { public void doit() ...{ System.out.println( System.currentTimeMillis() ); }} package timer; public class Test ... { /** *//** * @param args */ public static void main(String[] args) ...{ Task task = new NewTask(); Timer t = new Timer(1000,task); }}