我必须在新德里,香港,法兰克福,华盛顿等不同地方的屏幕上显示多个时钟。这些时间正在像其他任何真正的时钟一样发生变化,但是时间到了固定的日期 - 时间和他们当用户添加它们时,会在不同时刻添加到屏幕上。例如:
New Delhi 1d 4h 20 min 5s
Hong Kong 9h 2min 55s
Washington 22min 3s
...
我有一个Class,它使得所有计算以这种格式获得那些时间。当这些时间显示在屏幕上时出现问题。如何让他们同时更新时间?因此,秒中的所有更改都会同时显示。我知道理论上它不会在同一时间,但最接近它。这是我正在使用的计时器:
Timer t = new Timer();
t.scheduleAtFixedRate(
new TimerTask()
{
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
label[id].setText(getTimeLeft(id));
}
});
}
},
0, // run first occurrence immediately
1000); // run every seconds
此外,他们中的一些最终冻结。有没有人知道为什么?
答案 0 :(得分:5)
如何让他们同时更新时间?因此,秒中的所有更改都会同时显示。我知道它在理论上不会在同一时间,但最接近它。这是我正在使用的计时器:
不是为每个标签使用单独的Timer
,而是为所有标签使用单个Timer
Timer t = new Timer();
t.scheduleAtFixedRate(
new TimerTask()
{
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
for (int id = 0; id < label.length; id++) {
label[id].setText(getTimeLeft(id));
}
}
});
}
},
0, // run first occurrence immediately
1000); // run every seconds
这将减少您系统上的资源开销(一个计时器而不是n次),可能的事件队列发送垃圾邮件,因为多个计时器同时触发,并允许时间到#34;似乎&#34;同时更新,因为它们都在事件队列中更新,因此它们不会更新,直到下一个绘制周期,直到你退出运行块为止不会发生......
您还可以使用Timeline
,这样可以减少对Platform.runLater
的需求,请参阅How to update the label box every 2 seconds in java fx?作为示例。