更改操作系统日期和时间后线程休眠

Posted

技术标签:

【中文标题】更改操作系统日期和时间后线程休眠【英文标题】:Thread Sleep After Change OS Date and Time 【发布时间】:2014-01-02 20:34:44 【问题描述】:

我的代码中有一个计时器任务,它每秒执行一次,以比较计算机时间是否与数据库中的时间相同。

如果比较方法为零,则播放声音并弹出JOptionPane

之后我设置thread.sleep(10000) 来停止定时器任务。我之所以使用thread.sleep,是因为我不希望我的程序播放多个声音和弹出选项窗格。

问题是当我运行主应用程序时,我更改了操作系统日期和时间,用于比较时间的计时器任务将停止运行。因此,比较方法将停止检查。

有没有人想办法解决我的问题?

下面是我在定时器任务中的代码:

    Timer tickTock = new Timer();  // Create a Timer object
    TimerTask tickTockTask = new TimerTask()

        // This is what we want the Timer to do once a second.
        public void run()
            if(prayTimeGUI.compareTimeSubuh()== true)
                if(prayTimeGUI.getDisableAlertStatus()==true)
                    JOptionPane.showMessageDialog(null, "Waktu Subuh Telah Masuk","Sembahyang",
                            JOptionPane.INFORMATION_MESSAGE);
                else 
                    System.out.println("Date1 is equal to Date2");
                    playAlarm music = new playAlarm();
                    music.runmusic();
                    JOptionPane.showMessageDialog(null, "Waktu Subuh Telah Masuk","Sembahyang",
                            JOptionPane.INFORMATION_MESSAGE);
                
                try 
                    Thread.sleep(60000);
                 catch (InterruptedException e) 
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                
            
            else if(prayTimeGUI.compareTimeZohor()== true)
                if(prayTimeGUI.getDisableAlertStatus()==true)
                    JOptionPane.showMessageDialog(null, "Waktu Zohor Telah Masuk","Sembahyang",
                            JOptionPane.INFORMATION_MESSAGE);
                else 
                    System.out.println("Date1 is equal to Date2");
                    playAlarm music = new playAlarm();
                    music.runmusic();
                    JOptionPane.showMessageDialog(null, "Waktu Zohor Telah Masuk","Sembahyang",
                            JOptionPane.INFORMATION_MESSAGE);
                
                try 
                    Thread.sleep(60000);
                 catch (InterruptedException e) 
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                
                           
        

    ;

    tickTock.schedule(tickTockTask, 0, 1000);

【问题讨论】:

1) 请在句首加一个大写字母。还要为单词 I 使用大写字母,以及 JEE 或 WAR 等缩写词和首字母缩略词。这使人们更容易理解和帮助。 2) 为了尽快获得更好的帮助,请发布SSCCE。 3)请不要忘记添加“?”提问!有些人在页面中搜索“?”如果“问题”中不存在,则直接转到下一个(实际)问题。 【参考方案1】:

只需启动 Thread 并将您的逻辑移入其中而不是 TimerTask

【讨论】:

以上是关于更改操作系统日期和时间后线程休眠的主要内容,如果未能解决你的问题,请参考以下文章

java 22 - 7 多线程之控制线程的方法

Mac怎么修改系统时间和日期?苹果电脑对时间日期进行更改教程

使用 VBA 读写后 Excel 日期更改(月份和日期交换)

休眠条件中日期的限制

休眠 - 两个日期之间的差异

系统状态栏时间显示周几,想改成星期几,在哪里改