title: SwingWorker ProgressBar
body: <p>I am trying to get a progress bar to accurately reflect my SwingWorker. But I really can't figure out how to do it. I got the bar to just do a static animation until the operation has completed but I want a real active bar.</p>
  
  <pre><code>/*
   * 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&lt;String, Object&gt; {
  
      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() &gt; 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);
      }
  }
  </code></pre>