我在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对象。
答案 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);