Java Thread.sleep似乎非常不一致

Java Thread.sleep似乎非常不一致,java,animation,sleep,Java,Animation,Sleep,下面的方法是尝试将一个精灵移动到一个“块”迷宫中,我需要它每隔一段时间等待每一步,然后再次移动并重新绘制,但这种方法只会导致这个家伙永远移动,然后传送到所需的目的地 我的睡眠方法有什么问题吗 public void rightClick() { while(select.x != mouseConverter(mouseX) && select.y != mouseConverter(mouseY)) { int[][] path = select.ai(

下面的方法是尝试将一个精灵移动到一个“块”迷宫中,我需要它每隔一段时间等待每一步,然后再次移动并重新绘制,但这种方法只会导致这个家伙永远移动,然后传送到所需的目的地

我的睡眠方法有什么问题吗

public void rightClick() {
    while(select.x != mouseConverter(mouseX) && select.y != mouseConverter(mouseY)) {
        int[][] path = select.ai().getPath(arena, mouseConverter(mouseX), mouseConverter(mouseY), blocked);
        select.move(path[0][0], path[0][1]);
        repaint();
        try {
            Thread.sleep(1000);
        } catch(InterruptedException ex) {
            System.out.println("Inturrupted");
            Thread.currentThread().interrupt();

        }
    }
}

这可能需要大量的澄清,所以如果这非常令人困惑,请原谅我。

好的,谢谢@VGR向我透露AWT/Swing的问题,尽管最后我认为这是我的一个比较错误。以下是更新的代码:

public void rightClick() {
    TimerTask task;

    task = new TimerTask() {
        @Override
        public void run() {
            System.out.println("X: " + mouseConverter(mouseX) + " Y: " + mouseConverter(mouseY));
            System.out.println("SX: " + select.x + " SY: " + select.y);
            if (select.x != mouseConverter(mouseX) || select.y != mouseConverter(mouseY)) {
                int[][] path = select.ai().getPath(arena, mouseConverter(mouseX), mouseConverter(mouseY), blocked);
                select.move(path[0][0], path[0][1]);
                repaint();
            }
            else {
                cancel();

            }
        }
    };
    timer.schedule(task, 0, ANIMATION_DELAY);

}

在我更新了使用计时器的代码之后,我遇到了一个问题:如果X值或Y值与精灵的X值或Y值相同,我就无法移动。经过一个小时的工作,主要的问题不仅是计时器,还有我的比较器错误,我们共同努力,使问题变得完美。

AWT/Swing是基于事件的。您不能在事件侦听器调用的任何方法中休眠,因为它会阻止整个用户界面的更新(或响应进一步的鼠标/键盘输入)。试着休息一下,而不是睡觉。