gpt4 book ai didi

java - Thread.sleep() 在其他语句之前暂停 JFrame

转载 作者:行者123 更新时间:2023-12-01 20:52:13 25 4
gpt4 key购买 nike

Thread.sleep() 总是在 sleep() 语句执行之前暂停 JFrame。我有以下方法来暂停线程:

private void sleep(int milli)   {
try {
Thread.sleep(milli);
} catch (InterruptedException ex) {
writeToConsoleError("Interrupted");
}
}

我在 case CARDNOMATCH 下的以下 switch-case 语句中调用它:,此方法位于扩展 JFrame 的类中。

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。您预期的行为是 choice1choice2 卡将被翻转,等待 3 秒,然后再次翻转它们。但你得到的实际行为是,直到 3 秒过去才发生任何事情,3 秒后,卡片翻转了两次。

您需要了解的是 UI 具有帧速率。当你调用flipCard时,卡片直到下一帧才会翻转。在此帧与下一帧之间的时间内,将调用 Thread.sleep,以便所有内容(包括帧)暂停 3 秒。这就是 UI 在 3 秒暂停后更新的原因。

我建议您使用javax.swing.Timerjavax.swing.SwingWorker。请参阅herehere了解更多信息。

关于java - Thread.sleep() 在其他语句之前暂停 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43109860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com