Как мне заставить мой пример SwingWorker работать правильно?

Я сделал свой собственный пример SwingWorker, чтобы ознакомиться с тем, как он работает.

То, что я хочу сделать, заключается в следующем: при нажатии кнопки я хочу, чтобы индикатор выполнения отображался до тех пор, пока задача не будет выполнена, я хочу просто удалить индикатор выполнения и добавить строку в диалоговое окно.

Когда кнопка нажата, индикатор выполнения появляется, но никогда не исчезает. (никогда не удаляет индикатор выполнения через 10 секунд и никогда не помещает метку вверх)

Вот SSCCE:

package swingtesting;

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

public class SwingTesting {

    /**
     * Creates a frame that will hold a simple button to make use of SwingWorker
     */
     public static void main(String[] args) {
         // TODO code application logic here
         JFrame frame = new JFrame();
         JButton button = new JButton();

         button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new GuiWorker().execute();
            }
         });
         button.setText("Test Me");
         frame.getContentPane().add(button);
         frame.pack();
         frame.setVisible(true);
    }
}

class GuiWorker extends SwingWorker<Integer, Integer> {

    /*
     * This should just create a frame that will hold a progress bar until the
     * work is done. Once done, it should remove the progress bar from the dialog
     * and add a label saying the task complete.
     */

    private JFrame frame = new JFrame();
    private JDialog dialog = new JDialog(frame, "Swingworker test", true);
    private JProgressBar progressBar = new JProgressBar();


    public GuiWorker() {
        progressBar.setString("Waiting on time");
        progressBar.setStringPainted(true);
        progressBar.setIndeterminate(true);
        dialog.getContentPane().add(progressBar);
        dialog.pack();
        dialog.setVisible(true);
    }

    @Override
    protected Integer doInBackground() throws Exception {
        Thread.sleep(10000);
        return 0;
    }

    @Override
    protected void done() {
        JLabel label = new JLabel("Task Complete");
        dialog.getContentPane().remove(progressBar);
        dialog.getContentPane().add(label);
    }

}