在for循环中使用计时器绘制不同的对象

时间:2019-01-11 16:15:58

标签: java timer timertask

我想在JPanel上绘制几个对象,每个绘制之间都需要暂停。每个对象之间也存在一个间隙,我只需在for循环中进行计算即可。

考虑到这一点,我选择将java.util.Timer与自定义类一起使用,以扩展TimerTask类(因为我需要动态计算间隔)。

问题是,当我尝试以这种方式进行操作时,什么也没有显示,但是Timer正在运行,因为它在控制台日志中显示了一个字符串。但是,当我在for循环中简单地调用该函数时,对象会很好地显示。所以我真的不明白我做错了什么。

这是我的代码:

public class GameScreen extends JPanel {

    Turn turn;

    public GameScreen(Turn t) {
        super();
        this.turn = t;
    }

    public void paintComponent(Graphics g){
        this.setBackground(Color.decode("#ADCCDB"));

        if(this.turn.boolAction) {
            this.action(g, this.turn.listObjects);
        }
    }  

    public void action(Graphics g, ArrayList<Objects> listObject) {

        class PaintTask extends TimerTask{

            int i;

            public PaintTask(int i){
                super();
                this.i = i;
            }

            @Override
            public void run() {
                System.out.println(new Date() + " Task Executed");
                listObject.get(this.i).paint(g, 30, 30 + 60*this.i);
            }

        }
        Timer timer = new Timer();
        for(int i = 0; i < listObject.size(); i++) {
            timer.schedule(new PaintTask(i), 1000, 3000);
        }

        /*for(int i = 0; i < listObject.size(); i++) {
            action.get(i).paintHide(g, 30, 30 + 60*i);
        }*/
    }
}

有人知道这是怎么回事吗?

谢谢!

0 个答案:

没有答案