Я пытаюсь найти различия между 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 (), поскольку я прочитал, что он не должен использоваться.
Спасибо