¿Cómo actualizar java GUI desde Thread?

 private void StartActionPerformed(java.awt.event.ActionEvent evt) {

        Queue queue=new Queue();
        int target=Integer.parseInt(Target.getText());
        String path=Path.getText();
        final Producer p=new Producer(queue, target);
        Consumer c=new Consumer(queue);
        p.start();
        c.start();

        while(p.finish !=true)
        {
          Runnable r = new Runnable() {
            public void run() {
              ProgressPrecent.setValue(Producer.ProgressPercent);
            }
          };
          if(EventQueue.isDispatchThread()) {
            r.run();
          }
          else {
            EventQueue.invokeLater(r);
          }
       }
 }

Tengo dos clases que tienen una cola compartida. Uno de ellos es el productor que produce hasta que un objetivo otro consume esos elementos. todos los dos se extiende hilo. Quiero mostrar el porcentaje de progreso al usuario, pero congela mi GUI, ¿qué debo hacer?

Respuestas a la pregunta(2)

Su respuesta a la pregunta