如何获取 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。
实现此目的的另一种方法是每秒激活一个计时器并更新用户界面中的计数。如果时间到了,请调用您的具体操作。
仅具有控制台输出的简单示例:
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
,因此您不需要将对 Swing 组件的调用与SwingUtilities.invokeLater()
.
另请参阅:
Swing 应用程序内部的 javax.swing.Timer 与 java.util.Timer https://stackoverflow.com/questions/25025715/javax-swing-timer-vs-java-util-timer-inside-of-a-swing-application
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)