You can use SwingWorker to complete a task on a SwingWorker with EDT.
eg.
class BackgroundTask extends SwingWorker<String, Object> { @Override public String doInBackground() { return someTimeConsumingMethod(); } @Override protected void done() { System.out.println("Done"); } }
Then, wherever you call it:
(new BackgroundTask()).execute();
source share