Foros del Web » Programación para mayores de 30 ;) » Java »

Generar un Hilo para que muestre un panel de espera

Estas en el tema de Generar un Hilo para que muestre un panel de espera en el foro de Java en Foros del Web. Hola: A ver si me pueden ayudar. Tengo una pantalla que tiene un botón "Guardar" que al pulsarlo guarda la información en la bbdd. La ...
  #1 (permalink)  
Antiguo 21/08/2009, 05:42
 
Fecha de Ingreso: febrero-2008
Mensajes: 65
Antigüedad: 16 años, 2 meses
Puntos: 0
Generar un Hilo para que muestre un panel de espera

Hola:

A ver si me pueden ayudar. Tengo una pantalla que tiene un botón "Guardar" que al pulsarlo guarda la información en la bbdd. La cantidad de datos a guardar puede ser muy elevada y el tiempo que tarde en almacenarlos en bbdd puede ser elevado. Además, antes de guardar se realizan multitud de cálculos que también ralentizan la operación.-

Para que el usuario sepa qué se está guardando y que no pasa nada me gustaría mostrar una pantallita (estilo JOptionPane) que informe que se están guardando los datos y evitar que el usuario pulse otros botones antes de tiempo.

Lo he intentado hacer generando un hilo en el momento en el que se pulsa el botón guardar en cuyo método run tengo lo siguiente:

public void run(){
Thread t = new Thread(this);

JLabel etiqueta = new JLabel(texto);

panel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());
panel.setSize(300,120);
panel.setLocation(500,400);
panel.add(etiqueta,new org.netbeans.lib.awtextra.AbsoluteConstraints(30,3 5,240,20));
panel.setVisible(true);

}

Donde "texto" es el mensaje que aparece en la etiqueta y se lo paso en el constructor y "panel" es un JPanel normal. Pues bien, de esta forma no se muestra el panel.

He probado también con JOptionPane pero en este caso siempre tengo que pulsar en el botón para que se cierre en lugar de que se cierre cuando finalice la operación (para ello llamo al método stop que he creado en el objeto Hilo).

También he probado con JDialog. En este caso se muestra el Diálogo pero no se ve la información (el mensaje).

¿Alguien sabe cómo puedo hacerlo?

Gracias.
  #2 (permalink)  
Antiguo 21/08/2009, 06:01
 
Fecha de Ingreso: agosto-2009
Ubicación: Buenos Aires
Mensajes: 13
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Generar un Hilo para que muestre un panel de espera

Creo que la mejor forma de hacer lo que dices es utilizar el patron observer, junto con el thread, a ver si esto te sirve como ejemplo.

Clase que contiene la logica, es un thread, y un objeto observable...
public class Logica extends Observable implements Runnable{
public Logica(){

}

public void run()
{
/*
logica.....
logica...

*/

//hubo un cambio, es hora de avisar algo....
this.notificarEstadoObservadores("Cambio algo..........");

/*
logica.....
logica...

*/

//hubo otro cambio, es hora de avisar algo....
this.notificarEstadoObservadores("Cambio otra cosa..........");

/*
etc.
*/
}

/**
* Notifico una cambio de estado a los observadores.
*/
private void notificarEstadoObservadores(String mensaje){
this.setChanged();
this.notifyObservers(mensaje);
}
}


Clase observadora, generalmente la vista.
public class vista implements Observer{

private Logica logica;
private Thread thread;

private void lanzoThread(){
this.logica = new Logica();

this.logica.addObserver(this);
thread = new Thread(this.logica);
thread.start();
}

/**
* Recibe notificaciones de Logica
*/
public void update(Observable arg0, Object arg1) //Implementa de observer.
{
//Actualizo lo que quiero....
//this.label = arg1.toString();
}
}


Chequea el codigo, ya que lo hice desde aqui sin un compilador...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:46.