繁体   English   中英

使用计时器重画

[英]Using timer to repaint

我有一个迷宫,机器人可以四处走动和探索。 我正在尝试使用计时器在机器人移动时进行重新绘制,但是由于某些原因计时器没有启动。 它没有延迟程序,所以我看不到重新绘制过程。 这是我的代码:

public void updateDrawing(Maze maze) {  
    // 1000 millisecond delay
    Timer t = new Timer(1000, new TimerListener(maze));
    t.start();
}

private class TimerListener implements ActionListener {
    private Maze maze;

    public TimerListener(Maze maze) {
        super();
        this.maze = maze;
    }

    public void actionPerformed(ActionEvent e) {
        maze.repaint();
    }
}

public void explore (int id, Maze maze) {
    visited.add(maze.getCell(row, col));
    //Loop until we find the cavern 
    outerloop: //Label the outerloop for breaking purposes
    while(!foundCavern){
        //Move to a Cell
        Cell validCell = chooseValidCell(maze);
        //If validCell is null then we have to backtrack till it's not
        if(validCell == null){
            while(chooseValidCell(maze) == null){
                //Go back in route till we find a valid cell
                Cell lastCell = route.pollLast();
                if(lastCell == null){ //Implies we didn't find cavern, leave route empty
                    break outerloop;
                }
                this.row = lastCell.getRow();
                this.col = lastCell.getCol();
                updateDrawing(maze); // <- this calls repaint using timer
            }
            //Add back the current location to the route
            route.add(maze.getCell(row, col));
            validCell = chooseValidCell(maze);
        }
        this.row = validCell.getRow();
        this.col = validCell.getCol();
        updateDrawing(maze); // <- this calls repaint using timer
        //Add to the route 
        route.add(validCell);
        //Add to visited
        visited.add(validCell);
        //Check if we're at the cavern
        if(row == targetCavern.getRow() && col == targetCavern.getCol()){
            foundCavern = true;
        }
    }
}

谁能告诉我为什么? 谢谢!

尝试不使用** updateDrawing(maze)**,而是使用以下方法:

void updateMaze(){

    EventQueue.invokeLater(()->updateDrawing(maze));
}

这是制作基本计时器的方法。

计算显示时间所需要做的就是记录计时器启动的时间:

long startTime = System.currentTimeMillis();

以后,当您要显示时间量时,只需从当前时间中减去。

long elapsedTime = System.currentTimeMillis() - startTime;
long elapsedSeconds = elapsedTime / 1000;
long secondsDisplay = elapsedSeconds % 60;
long elapsedMinutes = elapsedSeconds / 60;
//put here code to format and display the values

您可以让程序等到elapsedSeconds ==您想要的任何值。

Java中的简单计时器开始

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM