java - 更改操作系统日期和时间后线程 hibernate

标签 java swing timer sleep

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

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

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

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

有没有人有其他想法来解决我的问题?

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

    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);

最佳答案

只需启动一个 Thread 并将您的逻辑移至其中,而不是移至 TimerTask 中。

关于java - 更改操作系统日期和时间后线程 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20594211/

相关文章:

java - 独立于平台的 OSGi 控制台

java - 使用箭头键浏览 JButton

java - JToolBar - JButton - 图像未显示

iphone - 设置 UIDatePickerModeCountDownTimer

java - 究竟是什么选择了这个 XPath 查询?

java - ClassNotFoundException 和 NoClassDefFoundError (为什么??)

java - Hashmap 上的 ClassCastException 到整数

java - 如何在 JComboBox 中正确渲染我自己的类?

c - C语言中的计时器不会耗尽CPU

c# - 从后台线程调用计时器