Ich versuche, die Unterschiede zwischen SwingWorker execute() vs doInBackground() zu finden, also habe ich dieses einfache Programm geschrieben, um den Unterschied zu testen.
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;
}
}
Wenn ich dieses Programm ausführe, erhalte ich die folgende Ausnahme:
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)
Als ich jedoch versuchte, die Funktion doInBackground() zu verwenden
new Worker().doInBackground();
das Programm funktioniert und gibt das erwartete Ergebnis aus. Was ist also mein Fehler? und sollte ich die doInBackground() Methode verwenden, da ich gelesen habe, dass sie nicht verwendet werden sollte.
Gracias