Java:我如何等待updateUI?

时间:2011-10-09 11:31:18

标签: java swing jpanel

我在ChessBoard Game上做了一个演示。我想你必须知道它。我怎么遇到一个问题。结果只是快速显示出来。我想看看它是如何慢慢运作的。

这是主要代码:

public void ChessBoard(int tr, int tc, int dr, int dc, int size) throws InterruptedException   {
        if (size == 1) {
            return;
        }
        Random rd = new Random();
        float red = rd.nextFloat();
        float green = rd.nextFloat();
        float blue = rd.nextFloat();
        Color col = new Color(red, green, blue);
        int s = size / 2;
        if (dr < tr + s && dc < tc + s) {
            ChessBoard(tr, tc, dr, dc, s);
        } else {
            button[tr + s - 1][tc + s - 1].setBackground(col);
            ChessBoard(tr, tc, tr + s - 1, tc + s - 1, s);
        }
        if (dr < tr + s && dc >= tc + s) {
            ChessBoard(tr, tc + s, dr, dc, s);
        } else {
            button[tr + s - 1][tc + s].setBackground(col);
            ChessBoard(tr, tc + s, tr + s - 1, tc + s, s);
        }
        if (dr >= tr + s && dc < tc + s) {
            ChessBoard(tr + s, tc, dr, dc, s);
        } else {
            button[tr + s][tc + s - 1].setBackground(col);
            ChessBoard(tr + s, tc, tr + s, tc + s - 1, s);

        }
        if (dr >= tr + s && dc >= tc + s) {
            ChessBoard(tr + s, tc + s, dr, dc, s);
        } else {
            button[tr + s][tc + s].setBackground(col);
            ChessBoard(tr + s, tc + s, tr + s, tc + s, s);
        }


        mainPanel.updateUI();
        for (long i=1;i<10000;i++){
            for (long j=0;j<10000;j++){
                i+=1;
                i-=1;
            }
        }

    }

但结果刚刚结束!似乎主面板没有完成它的工作。 mainJanel是一个JPanel对象。

4 个答案:

答案 0 :(得分:3)

  

我也在开始时添加睡眠,但只是进展缓慢,似乎与出现无关

您的代码似乎正在Event Dispatch Thread上执行。你永远不应该告诉EDT睡觉()。这可以防止GUI重新绘制自身。有关详细信息,请阅读Concurrency上Swing教程中的部分。

相反,您应该使用Swing Timer来安排每个动作的动画。本教程还有一个关于计时器的部分。

答案 1 :(得分:2)

updateUI用于更改组件的外观和感觉。要重新绘制面板的内容,您应该使用

mainPanel.repaint()

答案 2 :(得分:0)

只需使用Thread.sleep( /* time in milliseconds */ )来减慢执行速度。

答案 3 :(得分:0)

暂停执行sleep

实施例

public class SleepMessages {
    public static void main(String args[]) throws InterruptedException {
        String importantInfo[] = {
            "Mares eat oats",
            "Does eat oats",
            "Little lambs eat ivy",
            "A kid will eat ivy too"
        };

        for (int i = 0; i < importantInfo.length; i++) {
            //Pause for 4 seconds
            Thread.sleep(4000);
            //Print a message
            System.out.println(importantInfo[i]);
        }
    }
}

这样会降低你的程序速度。

 //Pause for 4 seconds
   Thread.sleep(4000);