gpt4 book ai didi

java - 为什么我的计时器不等待设定的时间?怎么修?

转载 作者:行者123 更新时间:2023-12-02 09:41:51 24 4
gpt4 key购买 nike

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

{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 的本地时间

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

使用LocalTime.now(ZoneId.of("America/Yellowknife"))用于获取当前时间。提供您所需的时区,而不是 America/Yellowknife。

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

并使用 ScheduledExecutorService

人们通常更喜欢使用 ScheduledExecutorService您从Executors.newScheduledThreadPool​获得而不是打电话 Thread.sleep直接地。你可以尝试一下。计算延迟的方法仍然与上面相同。

不要使用 SimpleDateFormat 和 Date

我建议您不要使用SimpleDateFormatDate 。这些类设计得很糟糕并且早已过时,尤其是前者非常麻烦。

您的代码中的错误可能是:您没有提供日期,仅提供一天中的时间。 SimpleDateFormat默认为 1970 年 1 月 1 日。由于该时间已经过去很久了(无论您提供的时间是什么),循环立即开始。

链接

关于java - 为什么我的计时器不等待设定的时间?怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57014687/

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