gpt4 book ai didi

java - 为什么 Thread.sleep() 或 TimeUnit.SECONDS.sleep() 延迟执行先前的语句而不是从调用 sleep() 的地方暂停

转载 作者:行者123 更新时间:2023-11-29 09:51:46 26 4
gpt4 key购买 nike

我在做一件简单的事情,打印一条错误消息,延迟执行 5 秒,然后调用另一个函数,这是代码

public void saveAndDisplay() throws InterruptedException{
//printing error message
if(saveValuesToDatabase()){
System.out.println("done");
errorType = "Done, you will be redirected to MainProject";
String message = "<html><body><font color='red'>"
+ errorType
+ "</font></body></html>";
lblError.setText(message);
} else {
System.out.println("not done");
errorType = "Some problem occured, try again";
String message = "<html><body><font color='red'>"
+ errorType
+ "</font></body></html>";
lblError.setText(message);
}

//delaying by 5 seconds
//Thread.sleep(5000); or
TimeUnit.SECONDS.sleep(5);

//now calling another function
doSomethingElse();
}

不是显示错误消息 - 然后延迟 - 然后调用 doSomethingElse(),执行首先延迟 5 秒,然后显示错误消息,然后调用 doSomethingElse()。这是我无法理解的,因为据我所知,语句是在 java 中逐行执行的,那为什么是 Thread.sleep(5000)TimeUnit.SECONDS.sleep (5) 不写也先执行?

如有任何帮助,我们将不胜感激。

最佳答案

我想你的 lblError 是一个 JLabel
在那种情况下,标签的值被直接设置,但控制权直到 sleep 结束后才返回给 AWT 线程。因此标签不会在屏幕上更新。

尝试使用 SwingUtilities.invokeAndWait()

您的代码可能如下所示:

// Compose message to put in label
// Must be 'final'
final String message = ...;

// Create runnable that sets the label
Runnable label_setter;
label_setter = new Runnable()
{
@Override
public void run()
{
lblError.setText(message);
}
};

// Set label within AWT thread and wait for it to finish
SwingUtilities.invokeAndWait(label_setter);

// Now we can wait
Timeunit.SECONDS.sleep(5);

...

关于java - 为什么 Thread.sleep() 或 TimeUnit.SECONDS.sleep() 延迟执行先前的语句而不是从调用 sleep() 的地方暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49687983/

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