Thread.sleep() 在其他语句之前暂停 JFrame
Thread.sleep() pauses JFrame before other statements
Thread.sleep() 总是在 sleep() 语句执行之前暂停 JFrame。
我有以下暂停线程的方法:
private void sleep(int milli) {
try {
Thread.sleep(milli);
} catch (InterruptedException ex) {
writeToConsoleError("Interrupted");
}
}
我在 case CARDNOMATCH: 下的以下 switch-case 语句中调用它:,此方法位于扩展 JFrame 的 class 中。
public void handlePacket(Packet recieved) {
int cmd = recieved.getCommand();
int arg1 = -99;
int arg2 = -99;
switch (cmd) {
case CARDNOMATCH:
arg1 = recieved.getFirstArg();
arg2 = recieved.getSecondArg();
if(arg1 > 9) {
arg1 = 9;
}
if(arg2 > 9) {
arg2 = 9;
}
flipCard(choice1, arg1);
flipCard(choice2, arg2);
sleep(3000);
flipCard(choice1, 10);
flipCard(choice2, 10);
break;
case ENABLE_TURN:
this.isTurn = true;
break;
case DISABLE_TURN:
this.isTurn = false;
break;
}
}
请任何人给我一些见解:(
UI 不是即时更新的。
当你打电话时
flipCard(choice1, arg1);
flipCard(choice2, arg2);
我假设 flipCard
以某种方式更新了 UI。而您预期的行为是 choice1
和 choice2
卡片将被翻转,等待 3 秒,然后再次翻转它们。但是你得到的实际行为是在 3 秒过去之前什么都没有发生,3 秒后,卡片翻转了两次。
你需要了解的是UI有一个帧率。当你调用flipCard
时,直到下一帧才会翻牌。在这一帧和下一帧之间的时间里,Thread.sleep
被调用,所以所有的东西,包括帧,暂停 3 秒。这就是 UI 在暂停 3 秒后更新的原因。
我建议您使用 javax.swing.Timer
或 javax.swing.SwingWorker
。有关详细信息,请参阅 here or here。
Thread.sleep() 总是在 sleep() 语句执行之前暂停 JFrame。 我有以下暂停线程的方法:
private void sleep(int milli) {
try {
Thread.sleep(milli);
} catch (InterruptedException ex) {
writeToConsoleError("Interrupted");
}
}
我在 case CARDNOMATCH: 下的以下 switch-case 语句中调用它:,此方法位于扩展 JFrame 的 class 中。
public void handlePacket(Packet recieved) {
int cmd = recieved.getCommand();
int arg1 = -99;
int arg2 = -99;
switch (cmd) {
case CARDNOMATCH:
arg1 = recieved.getFirstArg();
arg2 = recieved.getSecondArg();
if(arg1 > 9) {
arg1 = 9;
}
if(arg2 > 9) {
arg2 = 9;
}
flipCard(choice1, arg1);
flipCard(choice2, arg2);
sleep(3000);
flipCard(choice1, 10);
flipCard(choice2, 10);
break;
case ENABLE_TURN:
this.isTurn = true;
break;
case DISABLE_TURN:
this.isTurn = false;
break;
}
}
请任何人给我一些见解:(
UI 不是即时更新的。
当你打电话时
flipCard(choice1, arg1);
flipCard(choice2, arg2);
我假设 flipCard
以某种方式更新了 UI。而您预期的行为是 choice1
和 choice2
卡片将被翻转,等待 3 秒,然后再次翻转它们。但是你得到的实际行为是在 3 秒过去之前什么都没有发生,3 秒后,卡片翻转了两次。
你需要了解的是UI有一个帧率。当你调用flipCard
时,直到下一帧才会翻牌。在这一帧和下一帧之间的时间里,Thread.sleep
被调用,所以所有的东西,包括帧,暂停 3 秒。这就是 UI 在暂停 3 秒后更新的原因。
我建议您使用 javax.swing.Timer
或 javax.swing.SwingWorker
。有关详细信息,请参阅 here or here。