如何在java.util.Timer中留出时间?
如何在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而不是它自己的Thread
,因此您不需要使用SwingUtilities.invokeLater()
Swing组件的调用同步。
另见:
在Swing应用程序内部的javax.swing.Timer与java.util.Timer
您需要做的就是在MainActivity中声明一个长变量时间timeleft
。
long timeleft;
然后,当您创建一个新的Timer时,设置“onTick”覆盖以更新每个“onTick”的timeleft变量(在以下示例中为1000毫秒)
timer = new CountDownTimer(time, 1000) { @Override public void onTick(long millisecondsUntilFinished) { timeleft = millisecondsUntilFinished; } }
每当您需要检查剩余时间时,您的应用程序就可以访问变量timeleft。