Java GUI未正确更新

Java GUI未正确更新,java,swing,Java,Swing,我刚刚完成了一个项目,其中包括创建一个迷宫和编程三个“机器人”使用不同的策略在其中移动。我的实现涉及的类有: 具有三个子类的抽象类Robot 处理迷宫逻辑操作的迷宫类 一个JFrame类,以图形方式显示迷宫,并显示机器人在其中移动 最后,我有一个带有main方法的入口点,它只包含以下内容: Maze m = new Maze(); MazeFrame mf = new MazeFrame(m); RightHandRobot mr = new RightHandRob

我刚刚完成了一个项目,其中包括创建一个迷宫和编程三个“机器人”使用不同的策略在其中移动。我的实现涉及的类有:

  • 具有三个子类的抽象类Robot
  • 处理迷宫逻辑操作的迷宫类
  • 一个JFrame类,以图形方式显示迷宫,并显示机器人在其中移动
最后,我有一个带有main方法的入口点,它只包含以下内容:

    Maze m = new Maze();
    MazeFrame mf = new MazeFrame(m);
    RightHandRobot mr = new RightHandRobot(m, mf);
    mr.go(m);
这是完美的工作-迷宫显示在图形用户界面上,我可以看着机器人通过它,直到他到达终点-理想的效果

我的问题是:在JFrame的顶部有三个按钮,每个按钮都有一个ActionListener,它创建一个robot类型的实例并调用其go方法,从而使它移动到“finish cell”处。当我单击其中一个按钮时,机器人被创建并开始移动(我可以通过每次移动时执行的println语句来验证),但我看不到机器人在GUI上移动。GUI仅在机器人到达终点时更新(即go()方法完成时),此时将显示机器人所走的整个路径

为什么当robot由main方法创建时,GUI会正确更新,而不是由JFrame类创建时


我不确定你需要看什么代码来帮助我,所以让我知道你需要看什么

使用
javax.swing.Timer
来调整动画的速度,如下图所示。在每次滴答声中,计时器的侦听器应该只渲染正在运行的机器人


请展示您的
go
方法以及您认为应该将您的机器人从视图中放置/移除的任何部分。您可以发布您的来源吗?我认为问题可能出在机器人类中。听起来你在EDT中更新机器人的位置,可能在某种循环中。阻止事件分派线程同时阻止其分派/处理绘制请求的任何操作。你没有提供任何代码,所以我只是猜测