¿Cómo puedo hacer avanzar una barra de progreso mientras descargo un archivo?

Quiero saber cómo puedo hacer para hacer que la barra de progreso avance mientras estoy descargando un archivo , no he podido lograrlo , espero puedan ayudarme.

Este el código que he logrado hacer mientras tanto para descargar, pero no logro hacer que la barra avance con la descarga.

public void Descargar(){
   try{
           
            URL load = new URL("http://www.jquis.com/ejemplo.rar");
            URLConnection con = load.openConnection();
           
            InputStream is = con.getInputStream();
           
            jProgressBar1.setMinimum(0);
            jProgressBar1.setMaximum(con.getContentLength());
            jProgressBar1.setStringPainted(true);
           
            FileOutputStream out = new FileOutputStream("ejemplo.rar");
           
            byte[] array = new byte[1024];
            int contador = 0;
            int leido = is.read(array);
            while(leido > 0){
                out.write(array,0,leido);
                leido=is.read(array);
                long c = (contador / con.getContentLength())*100;
                jProgressBar1.setValue((int)c);
                contador++;
            }
            is.close();
            out.close();
        }catch(Exception e){
            System.out.println(e.getMessage());
        }
}

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

EDT

Tienes el mismo problema que ya fue descrito y solucionado en este post.

No es lo mismo , yo estoy descargando un archivo de un servidor

El problema es que no sé que lógica aplicar para que me valla avanzando conforme este archivo valla descargando, obtengo el size del archivo, usando el método getContentLenght() , me devuelve un número en Bytes , que en realidad lo uso como el valor final del progress bar, sin embargo, cuando ejecuto el programa , se queda igual a pesar de incluir que haga el setValue en el While, espero puedas ayudarme.

Imagen de ezamudio

es lo mismo

Me refiero a que tu problema es el mismo que el del otro post: la barra de progreso no se actualiza, porque estás acaparando el event dispatch thread de Swing, y debes realizar tu tarea (descargar el archivo, o lo que sea) en un hilo aparte y desde ahí enviar los mensajes de actualización a la barra de progreso. Revisa las respuestas de ese post.

Si, tenías razón, pero yo lo tenía en otro hilo de todos modos

El problema fue más lógico , estaba usando la variable leido, que siempre repetía la misma cantidad de byte, la solución fue hacer un acumulador de los byte leidos, en otra variable y de ahí funcionó jeje, muchas gracias.