title: Using SwingWorker to add a progress bar in a GUI
body: <p>I use SwingWorker to make a progress bar with Java Swing APIs. </p>
  
  <p>I have a class that extends SwingWorker</p>
  
  <pre><code>    class Swinger extends SwingWorker {
  private ClassAnalyzer classAnalyzer;
  
  public Swinger(ClassAnalyzer classAnalyzer){
       this.classAnalyzer = classAnalyzer;
  }
          @Override
          public Void doInBackground() throws InterruptedException {
  
              try
          {     
              int progress = 0;
              while (progress &lt; 100) {
  
   // at this point I make certain elaboration on classAnalyzer                 
  
                  progress++;
  
                  //Call the process method to update the GUI
                  publish(progress);
  
              }                       
          }
          catch(InterruptedException e)
          {
          }
          return null;
      }
  
      @Override
      protected void process(List chunks) {
       for (Integer chunk : chunks) {
          progressBar.setValue(chunk);
  
          //if the switchtype checkbox is selected then
          //change the progressbar to a determined type
          //once the progress has reached 50
          if (chunk &gt; 49)
          {
              if (switchType.isEnabled() &amp;&amp; switchType.isSelected())
              {
                  progressBar.setStringPainted(true);
  
              }
  
          }
       }
   }
  
  }
  </code></pre>
  
  <p>and a second class (I'm writing a piece of this)</p>
  
  <pre><code> public Tester()
  {
      JFrame guiFrame = new JFrame();
  
      //make sure the program exits when the frame closes
      guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      guiFrame.setTitle("Creating a Table Example");
      guiFrame.setSize(700,200);
  
      //This will center the JFrame in the middle of the screen
      guiFrame.setLocationRelativeTo(null);
  
  
      goButton = new JButton("Go");
      goButton.setActionCommand("Go");
      goButton.addActionListener(new ActionListener()
      {
  
          //When the button is clicked the SwingWorker class is executed and
          //the button is disabled
          @Override
          public void actionPerformed(ActionEvent event)
          {
  
              progressBar.setStringPainted(progressType.isSelected());
              ClassAnalyzer c = new ClassAnalyzer();
              Swinger task = new Swinger(c);
              task.execute();
  
              int methods = c.getNumberOfMethods();
  
              if(methods == 0){
              JOptionPane.showMessageDialogo(null, "methods not found");
              }
  
              goButton.setEnabled(false);
          }
      });
  
      }
  </code></pre>
  
  <p>When I launch in a Tester the second class, the message "methods not found" is displayed before progress bar appears, while I would like message appears in case
   after. What to do?</p>