Swing: barra de progreso

Señores, hace mucho tiempo que intento descubrir cómo hacer que funcione la barra de programas, pero no logré hacer nada.
La situación es la siguiente: se procesa una gran variedad de objetos, está claro que en el bucle for.
Hay una barra de progreso en el JFrame.
El código se ve así:
 

SwingUtilities.invokeLater(new Runnable(){

    @Override
    public void run(){
    for(Geoobject geoobject:Geoobjects){
        //здесь нужно поменять значение прогрессбара
        //Какие-то действия с объектом
        for(Rajon rajon:geoobject.getRajonsSet()){
            //Здесь нужно поменять текст на прогрессбаре
            //Какие-то действия с объектом
        }
    }
});


progressBar no se actualiza mientras se está ejecutando el bucle for.
Y tan pronto como se ejecuta, el usuario ve inmediatamente que la barra de progreso ya está llena.
Además, durante la depuración, está claro que su valor está cambiando. Pero no pasa nada en la pantalla.

¿Y qué está sucediendo exactamente? ¿No está actualizado? - juliana
Digamos que no se actualiza mientras el ciclo de for está funcionando.
Y tan pronto como se ejecuta, el usuario ve inmediatamente que la barra de progreso ya está llena.
Además, durante la depuración, está claro que su valor está cambiando. Pero no pasa nada en la pantalla. - lisa s
Respuestas
alex popa
Cuando dice
SwingUtilities.invokeLater(runnable)
, este ejecutable comienza desde event dispatching thread -a, que es el único. Para que el valor en la pantalla se actualice después de la llamada al
progressBar.setValue(progress)
, el evento debe volar. En su lugar, se envía a la cola de subprocesos de despacho de eventos, porque su ciclo aún no ha terminado.

Realice sus cálculos en un hilo diferente, no en el evento dispatcher-e. Por ejemplo, puedes hacerlo en SwingWorker-es
Y yo, tonto, pensé que SwingUtilities crea un nuevo hilo, y solo en él ...
Gracias, voy a estudiar. - olivia todman
Buena suerte :) - kizhepat
solenn
ruth anne
Por lo tanto, no le das el control. ¿En una corriente, todo sucede cuando debería actualizarse? Lea aquí: download.oracle.com/javase/tutorial/uiswing/concurrency/index.html
Ese es mi problema, no lo entiendo.
Tengo una instancia de JProgressBar en EventDispatcher.
desde otro subproceso (que se llama a través de SwingUtilities en la pregunta) Se realiza un cambio en la propiedad de la barra de progreso, que es el subproceso principal. Y no funciona.
Entiendo que estoy haciendo algo mal, pero no puedo entenderlo de ninguna manera, ¿cómo es eso? - prahallad badami