SwingWorker ProgressBar

Próbuję uzyskać pasek postępu, aby dokładnie odzwierciedlał mój SwingWorker. Ale naprawdę nie wiem, jak to zrobić. Mam pasek, który po prostu wykonuje animację statyczną, dopóki operacja nie zostanie zakończona, ale chcę prawdziwy pasek aktywny.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package frglauncher;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;

/**
 *
 * @author KYLE-LAPTOP
 */
class DownloadWorker extends SwingWorker<String, Object> {

    private String game;
    private JProgressBar bar;
    private JLabel label;

    public DownloadWorker(JProgressBar bar, String game, JLabel label) {
        this.game = game;
        this.bar = bar;
        this.label = label;
    }

    @Override
    public String doInBackground() {

        // Download here
        label.setText("test");
        try {
            // ProgressBar/Install
            System.out.println("FILELOCATION:\n----------");
            String URL_LOCATION = "http://www.futureretrogaming.tk/gamefiles/ProfessorPhys.jar";
            String LOCAL_FILE = ("\\" + game + "\\");
            File localfile = new File(LOCAL_FILE);
            if (localfile.exists()) {
                System.out.println("Directory exists!");
            }
            else {
                System.out.println("Directory doesn't exist! Creating...");
                localfile.mkdir();
                if (localfile.exists()) {
                    System.out.println("Directory created!");
                }
            }
            System.out.println("LOCALFILE:\n-------");
            System.out.println(LOCAL_FILE);
            URL website = new URL(URL_LOCATION);
            ReadableByteChannel rbc = Channels.newChannel(website.openStream());
            FileOutputStream fos = new FileOutputStream(LOCAL_FILE + "\\ProfessorPhys.jar\\");
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
            System.out.println("--------\nDone Downloading\n---------");

            RandomAccessFile randomAccessFile = null;

            File file = new File(LOCAL_FILE + "ProfessorPhys.jar\\");
            JarFile jar = new JarFile(file);
            Enumeration enum1 = jar.entries();
            while (enum1.hasMoreElements()) {
                JarEntry file1 = (JarEntry) enum1.nextElement();
                System.out.println("Directory to extract: " + LOCAL_FILE);
                System.out.println("\n" + file1.getName() + "\n");
                File f = new File(file1.getName());
                if (file1.isDirectory()) { // If it's a directory, create it
                    f.mkdir();
                    continue;
                }
                try (InputStream is1 = jar.getInputStream(file1)) {
                    FileOutputStream fos1 = new FileOutputStream(f);
                    while (is1.available() > 0) {  // Write contents of 'is' to 'fos'
                        fos1.write(is1.read());
                    }
                    fos1.close();
                }
            }
        }
        catch (FileNotFoundException ex) {
            Logger.getLogger(DownloadWorker.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (MalformedURLException ex) {
            Logger.getLogger(DownloadWorker.class.getName()).log(Level.SEVERE, null, ex);
        }
        catch (IOException ex) {
            Logger.getLogger(DownloadWorker.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "done";
    }

    @Override
    protected void done() {

        // Done
        label.setText("Download of " + game + "is done.");
        System.exit(0);
    }
}

questionAnswers(1)

yourAnswerToTheQuestion