我有一个mulitpanel框架,用于不同的显示目的,其中一个用于显示由预定时间任务执行的时间倒计时字符串:
private class TimerPad extends JPanel {
private int timeLeft = 60;
private String prefix = "Time Left: ";
TimerPad() {
setDoubleBuffered(true);
}
public void start() {
new java.util.Timer().schedule(new TimerTask() {
@Override
public void run() {
if (gameStatus == BoardStatus.JUDGING) {
this.cancel();
} else if (timeLeft == 0) {
submitCards(cardsSouth);
this.cancel();
} else {
timeLeft--;
repaint();
}
}
}, 1000, 1000);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
.....
}
@Override
public Dimension getPreferredSize() {
return new Dimension(240, 50);
}
}
此面板添加在主框架中,并在外部请求时触发其start()方法。现在,如果正常的60秒过去,timePad似乎只是很好,但是当我使用一个按钮(即提交)尝试取消任务时,所有的GUI都被冻结了...我试图为这个任务包装一个跑步者但是它结果是一样的......