如何在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。