gpt4 book ai didi

java - SwingWorker 没有按预期工作

转载 作者:搜寻专家 更新时间:2023-11-01 01:47:53 24 4
gpt4 key购买 nike

我试图找到 SwingWorker execute() 与 doInBackground() 之间的差异。因此我编写了这个简单的程序来测试差异。

 public static void main(String[] args) {
// TODO code application logic here
for(int i=0;i<10;i++){
try {
new Worker().execute();
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}

public static class Worker extends SwingWorker<Void,Void>{

@Override
protected Void doInBackground() throws Exception {
System.out.println("Hello");
return null;
}

}

当我运行这个程序时,我得到了以下异常:

Exception in thread "AWT-Windows" java.lang.IllegalStateException: Shutdown in progress
at java.lang.ApplicationShutdownHooks.add(ApplicationShutdownHooks.java:39)
at java.lang.Runtime.addShutdownHook(Runtime.java:192)
at sun.awt.windows.WToolkit.run(WToolkit.java:281)
at java.lang.Thread.run(Thread.java:619)

但是当我尝试使用 doInBackground() 时

new Worker().doInBackground();

程序运行并打印预期结果。那么我的错误是什么?我是否应该使用 doInBackground() 方法,因为我已经读到它不应该被使用。

谢谢

最佳答案

execute() 方法在当前线程上被调用。它安排 SwingWorker 在工作线程上执行并立即返回。在您的情况下,主线程在计划的工作线程有机会执行 doInBackground() 方法之前退出。您可以使用 get() 方法等待 SwingWorker 完成。

关于java - SwingWorker 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869947/

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