Difference between SwingWorker and SwingUtilities.invokeLater

java, multithreading, swing

Solution

`SwingUtilities.invokeLater` is used if you have something that must run in the EDT.

If you have a long-running task, you instead need to use a `SwingWorker`, since it does not run on the EDT and therefore does not cause the GUI to freeze while it runs.

Problem

I need to run some method in Swing application in separate thread. What is the difference between using SwingWorker and SwingUtilities.invokeLater. Which one should I use to run a thread in Swing application? I couldn't find exact info in the tutorial at http://java.sun.com/docs/books/tutorial/uiswing/concurrency/index.html

Original source