我在运行计时器的过程中发现了一个错误。计时器应该这样做:Java Swing Timer没有完成它的任务
Timer t = new Timer(60000, new ActionListener(){
public void actionPerformed(ActionEvent ev){
System.out.println(sdf.format(currentDate.getTime()));
try{
String update = sdf.format(currentDate.getTime());
Date dateToUpdate = sdf.parse(update);
int newMinutes = currentDate.getTime().getMinutes() + 1;
dateToUpdate.setMinutes(newMinutes);
currentDate.setTime(dateToUpdate);
System.out.println(sdf.format(currentDate.getTime()));
Component[] panelComps = mainPanel.getComponents();
System.out.println("created comp array");
Box panelBox = (Box) panelComps[0];
ImplementedJPanel[] panelArray = (ImplementedJPanel[])panelBox.getComponents();
System.out.println("created panel array");
for(ImplementedJPanel target : panelArray){
System.out.println("entered loop");
if(sdf.format(currentDate.getTime()).equals(sdf.format(target.targetDate))){
System.out.println("dates match");
buildWarning(target);
}else
System.out.println("the dates are different!");
}
}catch(Exception ex){}
}
});
让我解释一下:定时器应该接受当前的日期,更新的每一分钟,从ImplementedJPanel目标日期比较(一个JPanel子类,我写的)对象。我还在控制台上放了一些打印件,观看计时器的执行情况。控制台应显示旧的当前日期,新的当前日期以及它可以成功创建阵列。但它停在一定的印刷品上。控制台显示此:
08/01/2016/07:48
08/01/2016/07:49
created comp array
但它应该显示:
08/01/2016/07:48
08/01/2016/07:49
created comp array
created panel array
entered loop
...
但事实并非如此,而是它停止做什么,它的意思是半路做。
永远不要让你的catch块变空。你为什么要忽略任何可能抛出的异常?至少打印堆栈跟踪,catch(Exception ex){ex.printStackTrace(); }' –
对于我们所知的所有情况,这可能只不过是一个NullPointerException类型的问题。 –