gpt4 book ai didi

java - 如何获取 java.util.Timer 中的剩余时间?

转载 作者:行者123 更新时间:2023-12-01 22:27:06 24 4
gpt4 key购买 nike

如何获取 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,因此您不需要使用 SwingUtilities.invokeLater() 同步对 Swing 组件的调用。

另请参阅:
javax.swing.Timer vs java.util.Timer inside of a Swing application

关于java - 如何获取 java.util.Timer 中的剩余时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28539586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com