<p>For what I can read, it is used to dispatch a new thread in a swing app to perform some "background" work, but what's the benefit from using this rather than a "normal" thread?</p>

<p>Is not the same using a new Thread and when it finish invoke some GUI method using SwingUtilities.invokeLater?... </p>

<p>What am I missing here?</p>

<p><a href="http://en.wikipedia.org/wiki/SwingWorker" rel="nofollow noreferrer">http://en.wikipedia.org/wiki/SwingWorker</a></p>

<p><a href="http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html" rel="nofollow noreferrer">http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html</a></p>

SwingWorker is an implementation of a common pattern (in .Net i read there is
GuiWorker
BackgroundWorker for this), where you have to do some work in a GUI program, but keep the GUI responsive. The problem is that often GUI libraries are not multi thread safe, so the common way to implement such workers is to use the message loop of the library to transfer messages into the event loop of the application.
These classes allow you to easily update your GUI. Usually, they have a
```
update(int status)
```
method that is called by the thread, dispatched by the class, and handled by the GUI, while the thread continues its work.
Using normal threads, you would need to code your own events or some other messaging mechanism for this task, which can be a pain if you need this functionality often. Using invokeLater in Java for example, you would intermix the code for updating the gui into the code for doing the work. The SwingWorker allows you to keep things separate.