Whats interesting is that setProgress is supposed to throw IllegalArgumentException when it gets a value outside the 0-100 range. And adding a try, catch around your getData method does show the exception, but without that, the exception disappears into nothingness. I started tracing into the SwingWorker source, made it as far as FutureTask.Sync.innerSetException, then gave up. The disappearing exception might be a SwingWorker bug.