I'm trying to find the differences between SwingWorker execute() vs doInBackground().So I have written this simple program to test the difference.
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;
}
}
When I run this program I got the following exception:
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)
However when I tried to use the doInBackground()
new Worker().doInBackground();
the program works and prints the expected result. So what is my error? and should I use the doInBackground() method as I have read that it shouldn't be used.
Thanks
The execute() method is called on the current thread. It schedules SwingWorker for the execution on a worker thread and returns immediately. In your case, the main thread exits before scheduled worker thread has a chance to execute doInBackground()
method. You can wait for the SwingWorker to complete using the get()
methods.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With