我的代码中有一个计时器任务,每秒执行一次,以比较计算机时间是否与数据库中的时间相同。
如果比较方法为零,它将播放声音并弹出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/