さまざまな表示目的を果たすマルチパネル フレームがあります。そのうちの 1 つは、スケジュールされた timetask によって実行される時間カウントダウン文字列を表示するために使用されます。
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() メソッドがトリガーされます。現在、timePad は通常の 60 秒が経過した場合にのみ正常に動作しているように見えますが、ボタンを使用すると (送信など)、以前にタスクをキャンセルしようとすると、すべての GUI がフリーズします ... タスクのランナーをラップしようとしましたが、それは同じであることが判明しました...