Abrir formulario de progreso. Java/Swing

zeros-cool

Saludos mediavideros,

estoy empezando a trastear un poco con java y bueno, tengo una duda que espero, alguien sepa resolverme.

La cuestión es sencilla. Un formulario, dos textbox y un botón. En el textbox1 irá la ruta de origen y en el textbox2 la ruta destino. Al presionar el botón, se copia el contenido de ruta1 en ruta2.

Hasta aquí todo bien, pero me encuentro con un problema estético. Mientras se copian los archivos me gustaría mostrar otra ventana pequeña, con la típica imagen .gif de un círculo dando vueltas mientras muestro el mensaje "Copiando...".

¿Cómo CREÍA que se debería hacer? En el evento del botón, antes de llamar a la función llamémosla "Copiar()", abro la ventana. Cuando salga de la función o exista algún error o se cancele el proceso, la cierro. Código del evento:

private AbstractAction getAbsComenzar() {
	if(absComenzar == null) {
		absComenzar = new AbstractAction("Comenzar", null) {

			public void actionPerformed(ActionEvent evt) {
                                    //Creamos el objeto frmProgreso
				frmProgreso ventanaProgreso = new frmProgreso(null);
                                    //Centramos la ventana
				ventanaProgreso.setLocationRelativeTo (null); 
                                    //La mostramos
				ventanaProgreso.setVisible(true);
				
                                    //Copiamos ruta1 en ruta2
				if (Copia())
					Mensajes.MensajeConfirmacion("La copia ha terminado con éxito", "Copiado");
				
                                    //Cerramos la ventana
				ventanaProgreso.setVisible(false);
			}
		};
	}
	return absComenzar;
}

El problema que tengo es que la ventana se me abre cuando muestra el mensaje de confirmación "La copia ha terminado con éxito", y no antes, que es como yo quiero. ¿Alguna sugerencia?

kraneok

Con este trozo de código poco podemos hacer, la verdad.
Si pegases algo mas de código que veamos el contexto y por favor, dentro de la respectiva etiqueta highlight para código del foro.

De todas formas te digo que si quieres actualizar la interfaz gráfica mientras se realiza una tarea en backgroud, debes utilizar Threads, y que este Thread o bien se le pase la interfaz gráfica con la que actualiza, o bien puede utilizar la clase Handler.

1
zeros-cool

Muchas gracias, con eso me voy apañando. :)

1 respuesta
elkaoD

#3

Úsalo, cualquier cosa que podamos hacer sería una versión mala de eso.

Lo malo: no se puede hacer modal y el usuario la puede ignorar por tanto. Usa JProgressBar a secas para hacerlo personalizado.

PD: el puto Java tiene DE TODO.

Usuarios habituales

  • elkaoD
  • zeros-cool
  • kraneok