我有一个线程正在运行,它不断递重地重新绘制迷宫,直到达到退出。下面的方法负责重新粉刷迷宫。
private void moveFromStep(int x, int y) {
if(step){
if(isWall(x,y))
return ;
if(isVisited(x,y))
return ;
if(isGoal(x,y)){
free = true;
JOptionPane.showMessageDialog(this, "Solution Complete: finish reachable");
}
if(!free){
step = false;
setVisited(x,y);
repaint();
//try {Thread.sleep(3000);} catch (Exception e) { }
//try {wait();} catch (Exception e) { }
moveFromStep(x-1,y);
moveFromStep(x+1,y);
moveFromStep(x,y-1);
moveFromStep(x,y+1);
}
}
}
现在我有一个单独运行的JPanel,我想逐步重新绘制它。 我想通过使用" Step"按钮。因此,当" Step"按下按钮。下面的代码是按钮的动作监听器
public void actionPerformed(ActionEvent event) {
String action = event.getActionCommand();
MazeStep mazeStep = new MazeStep();
Thread mazeThreadStep = null;
if (action.equals("Load Maze")) {
mazeAnim.readFile(getName());
//mazeStep = new MazeStep();
mazeStep.readFile(getName());
}
else if(action.equals("Start")){
JFrame world = new JFrame();
mazeStep = new MazeStep();
mazeStep.readFile(getName());
world.setSize(300, 300);
world.setTitle("Maze solver");
world.setContentPane(mazeStep);
world.setVisible(true);
mazeThreadStep = new Thread(mazeStep);
mazeThreadStep.start();
}
if(action.equals("Step")){
mazeStep.step = true;
synchronized (mazeThreadStep) {
mazeThreadStep.notify();
}
}
}
所以任何人都可以帮助我实现这个目标。