title: Can't get JProgressBar to update from SwingWorker class
body: <p>I have my main GUI thread which has a JprogressBar in it and is implementing ProprtyChangeListener.</p>
  
  <p>When a button is pressed, a different class, which extends SwingWorker, kicks into action and performs a series of potentially long calculations. 
  I need the progress bar in class A to present the progress according to a variable in Class B.</p>
  
  <p>My code is below (could be a bit messy with all my failed tries...)</p>
  
  <p>Would appreciate any help.</p>
  
  <p>GUI CLASS:</p>
  
  <pre><code>SignalSimulator signalSimulator = new SignalSimulator(
                  path, numOfdataPoints, numOfLocalSpikes,
                      numOfExpSpikes, noiseAmp, slope, offset,
                                      rdbtnSineWave.isSelected());       
  signalSimulator.addPropertyChangeListener( new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent evt) {
          String property = evt.getPropertyName();
          if ("progress".equals(property)) {
              int progress = (Integer) evt.getNewValue();
              System.out.println("value in PropertChangeListener is: " + progress);
              progressBar.setValue(progress);
          }
      }
  });
  signalSimulator.execute(); 
  </code></pre>
  
  <p>Calculating class:</p>
  
  <pre><code>protected Integer doInBackground() throws Exception {
      if (isSine){
          data = generateSineWave(numOfDataPoints, noiseAmp, offset);
          data = addAnomalies(data, numOfPointOutliers, numOfExpSpikes);
      } else {
          data = generateLinearSignal(numOfDataPoints, noiseAmp, slope, offset);
          data = addAnomalies(data, numOfPointOutliers, numOfExpSpikes);
      }
      writeLogFile(path, ".txt", data);
      firePropertyChange("progress", 1, 1);
      setProgress((int)progress);
      publish(progress);
      System.out.println("value in doInBackground is: " + progress);
      return 1;
  }
  </code></pre>
  
  <p><strong>EDIT</strong></p>
  
  <p>Original problem remains. For some reason the progress bar is still not updating,
  I know for sure that the "progress" variable in progressBar.setValue(progress) is updating yet the progress bar in the GUI remains unchanged (fixed at 0)
  here is my new code:</p>
  
  <p>GUI Class:</p>
  
  <pre><code>    SignalSimulator signalSimulator = new SignalSimulator(path, numOfdataPoints, numOfLocalSpikes, numOfExpSpikes, noiseAmp, slope, offset, rdbtnSineWave.isSelected());       
      signalSimulator.addPropertyChangeListener( new PropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent evt) {
          String property = evt.getPropertyName();
  
          if ("progress".equals(property)) {
              int progress = (Integer) evt.getNewValue();
               System.out.println("value in PropertChangeListener is: " + progress);
               progressBar.setValue(progress);
  
          }
        }
      });
      signalSimulator.execute();
  </code></pre>
  
  <p>SwingWorker Class:</p>
  
  <pre><code>@Override
          protected Integer doInBackground() throws Exception {
  
              if (isSine){
                  data = generateSineWave(numOfDataPoints, noiseAmp, offset);
                  data = addAnomalies(data, numOfPointOutliers, numOfExpSpikes);
              }
              else{
                  data = generateLinearSignal(numOfDataPoints, noiseAmp, slope, offset);
                  data = addAnomalies(data, numOfPointOutliers, numOfExpSpikes);
              }
  
              writeLogFile(path, ".txt", data);
  
              return 1;}
  
  
  public double[] generateSineWave(int numOfDataPoints, double noiseAmp, double offset){
  
              Random rnd = new Random();
              double[] dataArray = new double[numOfDataPoints];           
  
  
              for (int i=0;i&lt;numOfDataPoints;i++){
  
                  dataArray[i] =  Math.sin(Math.toRadians(i))+rnd.nextDouble()*noiseAmp+offset;
                  progress = ((double)i)/(double)numOfDataPoints*100;
  
                  //firePropertyChange("progress", 1, 1);
                  setProgress((int)progress);
                  //publish(progress);
                  System.out.println("value in doInBackground is: " + progress);
              }
  
              return dataArray;           
  </code></pre>
  
  <p><strong>EDIT</strong>
  Rewrote the whole thing without the extra (irrelevant) code. I guess I'm missing something basic here caus it still doesn't update the progress bar.</p>
  
  <pre><code>public class ProgressBarTest implements PropertyChangeListener {
  
  
      private JFrame frame;
      private JButton btnRun;
      static JProgressBar progressBar = new JProgressBar(0,100);
  
  public static void main(String[] args) {
  
          EventQueue.invokeLater(new Runnable()  {
              public void run() {
                  try {
                      //UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); 
                      UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
                      ProgressBarTest window = new ProgressBarTest();
                      window.frame.setVisible(true);
                      //SignalSimulator signalSimulator = new SignalSimulator();
  
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
  
              }
          });
      }
  
  /**
   * Create the application.
   */
  public ProgressBarTest() {
      initialize();
  }
  
  private void initialize() {
      frame = new JFrame();
      frame.setBounds(100, 100, 450, 300);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().setLayout(null);
      frame.setResizable(false);  
  
      JProgressBar progressBar = new JProgressBar();
      progressBar.setAlignmentX(Component.RIGHT_ALIGNMENT);
      progressBar.setBounds(0, 252, 444, 20);
      progressBar.setStringPainted(true);
      frame.getContentPane().add(progressBar);
  
  
      JButton btnRun = new JButton("Start Long Run");
      btnRun.setBounds(167, 214, 159, 31);
      frame.getContentPane().add(btnRun);
      btnRun.addActionListener(new ActionListener() {
  
          @Override
          public void actionPerformed(ActionEvent e) {
              // TODO Auto-generated method stub
              longRun();
          }
  
      } );
  
  }
  
  
  private void longRun(){
  
      LongRunner longRunner = new LongRunner(100000);
      longRunner.addPropertyChangeListener(new PropertyChangeListener() {
  
          @Override
          public void propertyChange(PropertyChangeEvent evt) {
  
              if ("progress".equals(evt.getPropertyName())){
                  int progress = (int) evt.getNewValue();
                  System.out.println("Value in propertyChangeListener: "+progress);
                  progressBar.setValue(progress);
              }
          }
      });
      longRunner.execute();
  }
  @Override
  public void propertyChange(PropertyChangeEvent arg0) {
      // TODO Auto-generated method stub
  
  }
  
  }
  </code></pre>
  
  <p>And the SwingWorker:</p>
  
  <pre><code>import javax.swing.SwingWorker;
  
  
  public class LongRunner extends SwingWorker&lt;Integer, Double&gt;{
  
      int numOfPoints;
      double progress;
  
      public LongRunner(int numOfPoints) {
  
          this.numOfPoints = numOfPoints;
          this.progress = 0;
      }
  
      private void runLong(int bigNum){
  
          for (int i=0; i&lt; bigNum; i++){
  
              try {
                  Thread.sleep(100);
              } catch (InterruptedException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
              }
              progress =  (((double)i*100)/(double)bigNum);
              setProgress((int)progress);
              System.out.println("Value in setProgress: "+progress);
  
          }
  
      }
      @Override
      protected Integer doInBackground() throws Exception {
  
          runLong(numOfPoints);
          return null;
      }
  
  }
  </code></pre>
  
  <p>What am I doing wrong here?</p>