2014-12-03 2 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 

Вы можете сделать вашу программу до тех пор, пока не истечет секунды.

От Make a simple timer in Java

+0

Вы знаете способ использовать таймер свинга ? Я не хочу менять программу. Этот метод работал для другой программы. Это должно быть простое исправление. Я просто не знаю, как это исправить ... – JOH

0

Попробуйте использовать не ** updateDrawing (лабиринт) **, но этот метод:

аннулируется updateMaze() {

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

Спасибо, но это не сработало ... Таймер все еще не пьет ... – JOH

Смежные вопросы