当一个子面板中的时间任务计划启动时,UI被冻结

时间:2013-08-29 13:54:01

标签: java multithreading swing

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

0 个答案:

没有答案