gpt4 book ai didi

java - SwingWorker的execute()方法似乎没有做任何事情

转载 作者:行者123 更新时间:2023-11-30 06:45:46 25 4
gpt4 key购买 nike

我从教程中复制了下面的代码并将其粘贴到我的编辑器 (Netbeans 8.1) 中。我读了SwingWorker documentation据我从这篇文档和其他文档中了解到, execute() 方法应该“启动线程”(或将其放入工作线程中)。

public class Sandbox {
public static void main(String[] args)
{
SwingWorker<Void, Void> w = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
for(int i=0; i<=10; i++){
Thread.sleep(1000);
System.out.println(i);
}
return null;
}
};
w.execute();
}
}

这里有什么问题吗?如果我使用 SwingUtilities.invokeLater(w) 它可以工作,但它只显示 0,当我删除 Thread.sleep(1000) (据我所知,应该暂停事情),它按预期工作。

最佳答案

SwingWorker 确实使用守护线程(此处以工作线程的形式)。当唯一运行的线程都是守护线程时,Java 虚拟机本身就会退出。因此,在您的程序中,您到达了 main 方法的末尾,并且您的程序被终止。请参阅API :

public final void execute()

Schedules this SwingWorker for execution on a worker thread. There are a number of worker threads available.

删除 Thread.sleep 时,您的计算机可能足够快,可以在 JVM 退出之前执行循环。

您可以等待 SwingWorker 完成 get方法,尽管这会阻塞你的主线程。

关于java - SwingWorker的execute()方法似乎没有做任何事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48379969/

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