JProgressBar no se actualiza, no puede encontrar una pista

nice job, ahora solo quiero saber por qué si agrego al ciclo while la instrucción System.out.println debajo del progreso se muestra en cmd y Pgbar en la interfaz gráfica de usuario. :

while(progress < 99){ 
  System.out.println("into while of PBar Thread progress = "+progress); 
  if(progress != Path.operationProgress){ 
    operationProgressBar.setValue(progress); 
    progress = Path.operationProgress; 
    operationProgressBar.repaint(); } }

Necesito ayuda, no puedo hacer que JProgressBar se actualice, no puedo usar SwingWorker, tengo que resolver esto sin él. la variable Path.operationProgress es una variable estática de una instancia de clase "Path", y se actualiza desde otro subproceso, por lo que creo que las instancias PBar y Path se ejecutan en subprocesos del usuario y no en el EDT. Aquí está el Código de la barra de progreso:

    import javax.swing.*;
    public class Pbar extends Thread {
      JProgressBar operationProgressBar;
      public Pbar(JProgressBar operationProgressBar) {
          this.operationProgressBar = operationProgressBar;
      }

      @Override
      public void run() {
          int progress = Path.operationProgress;
          while(progress < 99) {
              if(progress != Path.operationProgress) {
                  operationProgressBar.setValue(progress);
                  progress = Path.operationProgress;
                  operationProgressBar.repaint();
              }}}
     }

esta es la acción que lanza los hilos:

private javax.swing.JProgressBar operationProgressBar;
private javax.swing.JLabel pathImage;
private javax.swing.JButton simulatedAnnelingButton;

public class TSPGUI extends javax.swing.JFrame {

    TSPMG tspInstance;
    Path p, result;
    String filename = "";
    int neighborHood_Type = 1, i = 0;
    // ......Constructor Stuff and init()

private void simulatedAnnelingButtonActionPerformed(java.awt.event.ActionEvent evt)

{
Thread sa = new Thread () {@Override public void run () {result = p.SimulatedAnnealing (neighborHood_Type); Cadena lastCostString = result.Cost () + ""; lastCostLabel.setText (lastCostString); }}; sa.start (); Pbar pb = nueva Pbar (operationProgressBar); pb.start (); } // Algunas otras cosas ...}

Respuestas a la pregunta(4)

Su respuesta a la pregunta