0

我有一个用于不同显示目的的多面板框架,其中一个用于显示由预定时间任务执行的时间倒计时字符串:

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 都被冻结......我试图为任务包装一个跑步者但是结果是一样的……

4

0 回答 0