【问题标题】:Why doesn’t my timer wait for the time set? How to fix?为什么我的计时器不等待设置的时间?怎么修?
【发布时间】:2019-11-22 16:15:12
【问题描述】:

我正在执行此任务,用户在“准时”和“倒计时”复选框之间进行选择,设置延迟时间、倒计时或准时,新窗口打开并更改颜色。倒计时工作正常,它会等待应用程序启动的设定时间。问题在于“准时”选项,一切正常,直到我按下开始按钮,它立即开始。它不会等待时间设置。

{if (jCheckBox1.isSelected())
st=true;
set = jFormatted.getText();
  SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  
   try 
       Date  date = sdf.parse(set);
       date.toString();
    catch (ParseException ex) 
       Logger.getLogger(TimerApp.class.getName()).log(Level.SEVERE, null, ex);
   
    sw = new SwingWorker() 
        @Override
        protected Object doInBackground() throws Exception 
             
          Thread.sleep(s.getTime1());
            FrameBoja.Pocetak();
            while(st)
               
                FrameBoja.cf.getContentPane().setBackground(s.getColor());
                Thread.sleep(s.getSpeed());
                 FrameBoja.cf.getContentPane().setBackground(new Color (44,62,80)); 
                  Thread.sleep(s.getSpeed());  
            
            return null;
        
    
    sw.execute();


}

【问题讨论】:

    标签: java time timer sleep


    【解决方案1】:

    来自 java.time 的本地时间

    使用LocalTime.parse(set) 解析设置的时间(您不需要格式化程序,因为您的字符串是ISO 8601 格式,LocalTime 的默认格式)。 LocalTime 是一天中没有日期的时间。我认为这就是您所需要的。

    使用LocalTime.now(ZoneId.of("America/Yellowknife")) 获取当前时间。提供您想要的时区,而不是美国/黄刀。

    使用ChronoUnit.MILLIS.between 计算现在与设定时间之间的毫秒差。基本上这是传递给Thread.sleep 的毫秒数。但是,如果数字是负数,请不要睡觉,因为设置的时间已经过期(如果你给它一个负数,Thread.sleep 会抛出异常)。

    并使用 ScheduledExecutorService

    人们通常更喜欢使用从Executors.newScheduledThreadPool​ 获得的ScheduledExecutorService,而不是直接调用Thread.sleep。你可以试试。计算延迟的方法还是和上面一样。

    不要使用 SimpleDateFormat 和 Date

    我建议你不要使用SimpleDateFormatDate。这些类设计不佳且早已过时,尤其是前者非常麻烦。

    您的代码中出现的问题可能是:您没有提供日期,只提供了一天中的某个时间。 SimpleDateFormat 默认为 1970 年 1 月 1 日。由于那个时间已经过去了(无论您提供什么时间),循环立即开始。

    链接

    【讨论】:

      猜你喜欢
      • 2021-10-03
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2018-03-03
      相关资源
      最近更新 更多