如何获取util.Timer中剩余的时间?我想做的是添加一个进度条,显示直到计时器重新开始之前剩余的时间。
这就是我到目前为止所得到的:
int seconds = 8; java.util.Timer timer = new Timer(); timer.schedule( new TimerTask(){ public void run(){ // Do something // Add a progressbar that displays time left until the timer "starts over". },0,(long) (seconds*1000));
您将需要第二个计时器以特定间隔刷新gui。 实现此目的的另一种方法是每秒激活一个计时器并更新ui中的计数。如果时间到了,请致电您的具体措施。
一个仅带有控制台输出的简单示例:
TimerTask task = new TimerTask() { int seconds = 8; int i = 0; @Override public void run() { i++; if(i % seconds == 0) System.out.println("Timer action!"); else System.out.println("Time left:" + (seconds - (i %seconds)) ); } }; Timer timer = new Timer(); timer.schedule(task, 0, 1000);
它的输出将是:
Time left:7 Time left:6 Time left:5 Time left:4 Time left:3 Time left:2 Time left:1 Timer action! Time left:7 Time left:6 Time left:5 Time left:4 Time left:3 Time left:2 Time left:1 Timer action! Time left:7 Time left:6 ...
然后只需使用代码更改System.out即可更新进度条。记住:java.util.Timer开始自己Thread。Swing不是线程安全的,因此您需要将每个gui更改代码放入SwingUtilities.invokeLater()! 如果您不执行任何长时间运行的任务,则每次计时器达到8秒标记时,您可能都希望javax.swing.Timer直接使用它。它使用EDT而不是使用它自己的EDT Thread,因此您不需要使用来同步对Swing组件的调用SwingUtilities.invokeLater()。
java.util.Timer
Thread
SwingUtilities.invokeLater()
javax.swing.Timer