[英]SwingWorker doesn't work as expected
我試圖找到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()
方法之前退出。 您可以等待SwingWorker使用get()
方法完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.