2014-12-03 60 views
0

我有一個迷宮,機器人可以移動並探索。我試圖使用計時器重新繪製,因爲機器人移動但計時器由於某種原因不踢。這不是拖延程序,所以我不能看到重新繪製過程。這裏是我的代碼:使用計時器重新繪製

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; 
     } 
    } 
} 

有誰能告訴我爲什麼?謝謝!

回答

-1

以下是如何製作一個基本的計時器。

所有你需要做的計算顯示時間,是記錄計時器的開始時間:

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 ==你想要的任何值。

Make a simple timer in Java

+0

你知道的方式,使用擺動計時器?我不想改變這個程序。這種方法適用於不同的程序。它一定是一個簡單的修復。我只是不知道如何解決它... – JOH 2014-12-03 17:22:02

0

嘗試使用不** updateDrawing(迷宮)**但是這種方法:

無效updateMaze(){

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

謝謝,但是沒有工作...計時器仍然沒有踢... – JOH 2014-12-03 17:20:39