The common way to interact with EDT from swing worker is useing get() method. But i have a long task and code like this:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
MyGlobalGUIConsole.addMessage("Done for " + o);
}
}
In most tutotials is recommended to use return values to get something back from SwingWorker to EDT, but can i just:
public Void doInBackground() {
for(Object o : objects) {
doSomething();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
MyGlobalGUIConsole.addMessage("Done for " + o);
}
});
}
}
You can, but the SwingWorker has methods designed to report progress of a background task: you call
publish()
fromdoInBackground()
to publish progress, and you overrideprocess()
(which is called in the EDT) in order to display the progress. So the above code could be rewritten as: