Java时钟同步 我必须在屏幕上显示来自新德里、香港、法兰克福、华盛顿等不同地点的多个时钟,这些时间像任何其他实际时钟一样变化,但随着时间的流逝,在固定的日期时间,它们在用户添加它们的不同时刻被添加到屏幕上。例如: New Delhi 1d 4h 20 min 5s Hong Kong 9h 2min 55s Washington 22min 3s ...

Java时钟同步 我必须在屏幕上显示来自新德里、香港、法兰克福、华盛顿等不同地点的多个时钟,这些时间像任何其他实际时钟一样变化,但随着时间的流逝,在固定的日期时间,它们在用户添加它们的不同时刻被添加到屏幕上。例如: New Delhi 1d 4h 20 min 5s Hong Kong 9h 2min 55s Washington 22min 3s ...,java,multithreading,timer,Java,Multithreading,Timer,我有一个类,它进行所有的计算,以得到这种格式的时间。当这些时间显示在屏幕上时,问题就出现了。我如何让他们同时更新时间?因此,秒数内的所有变化都同时显示。我知道这在理论上不会同时发生,但最接近它。这是我正在使用的计时器: Timer t = new Timer(); t.scheduleAtFixedRate( new TimerTask() { public void run() { Platform.runLater(new Runna

我有一个类,它进行所有的计算,以得到这种格式的时间。当这些时间显示在屏幕上时,问题就出现了。我如何让他们同时更新时间?因此,秒数内的所有变化都同时显示。我知道这在理论上不会同时发生,但最接近它。这是我正在使用的计时器:

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
而且,其中一些最终会冻结。有人知道为什么吗

我如何让他们同时更新时间?因此,秒数内的所有变化都同时显示。我知道这在理论上不会同时发生,但最接近它。这是我正在使用的计时器:

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
不要对每个标签使用单独的
定时器
s,而是对所有标签使用单个
定时器

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
Timer t=new Timer();
t、 预定固定日期(
新TimerTask()
{
公开募捐{
Platform.runLater(新的Runnable(){
@凌驾
公开募捐{
for(int id=0;id
这将减少系统上的资源开销(一个计时器而不是n个计时器),多个计时器同时触发时可能出现的事件队列垃圾邮件,并允许时间“似乎”同时更新,因为它们都在事件队列中更新,所以在下一个绘制周期之前不会更新,在你退出跑步区之前不会发生这种情况


您还可以使用
Timeline
,这将减少对
Platform.runLater
的需要,请参阅示例。

@HovercraftFullOfEels
Platform.runLater(新Runnable(){
可能会建议使用JavaFX,但是,您的建议仍然有meritIt可能最好使用一个负责更新标签列表的
计时器,而不是对单个标签使用多个
计时器。我将在这里退出我的元素时收回它。谢谢@MadProgrammer.Yes,这种方法非常有效。现在从一秒到另一秒的转变是瞬间的,在简单的视线中是看不到的。