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

[SOLUCIONADO] Problema al mostrar un dialogo

Estas en el tema de Problema al mostrar un dialogo en el foro de Java en Foros del Web. Hola, desde ya gracias por su ayuda El problema es que hice un gif animado para mostrar mientras cargo los datos. El problema es que ...
  #1 (permalink)  
Antiguo 23/10/2013, 11:22
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Problema al mostrar un dialogo

Hola, desde ya gracias por su ayuda

El problema es que hice un gif animado para mostrar mientras cargo los datos.
El problema es que hasta que la BD no responde no se muestra el dialogo. Y en realidad es justo para mostrar durante la consulta.

Mi idea es que antes de entrar a la función de busqueda muestre el dialogo. Pero parece que ese no es el orden que utiliza el compilador.

Código Java:
Ver original
  1. public Boolean buscarDatoSQL(String usuario){
  2. Boolean existeUsuario=false;
  3.  
  4. DialogoCargando =new DialogoCargando(); // es un hermoso dialogo con una etiqueta con un gif animado.
  5.  
  6. existeUsuario=existeUsuarioEnBD(usuario);
  7.  
  8. return existeUsuario;
  9. }


Desde ya muchas gracias

Última edición por francap; 23/10/2013 a las 11:47 Razón: faltaba un parámetro
  #2 (permalink)  
Antiguo 25/10/2013, 07:10
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Problema al mostrar un dialogo

Es probable que no me haya explicado bien, voy a intentar hacerlo mejor.

Mientras la aplicación java se comunica por JDBC con my sql, la aplicación queda como tildada. Si la consulta es rápida no se nota. Pero si es una consulta compleja o el servidor mysql por ejemplo no esta encedido. La aplicación se queda tildada unos segundos.

En realidad solo afecta a gente nerviosa como yo

Por tanto pensé en mostrar un dialogo con movimiento que diga cargando mientras se tiramos una consulta a la BD. como por ejemplo este


El problema es que por más que yo muestre el diálogo "CARGANDO" antes de llamar al método que se encarga de ejecutar la consulta. Este no se muestra hasta que:

O la consulta ya se completó

O ya se lanzó la excepción mysql

Intenté poner un retraso entre la llamada al dialogo "CARGANDO" y la llamada al método de comunicación con mysql.

Pero haga lo que haga el dialogo "CARGANDO" siempre se muestra después que se lanza la excepción MYSQL.

Bueno se que no es sumamente importante y que las funciones se cumplen igual. Pero soy medi TOC


Desde ya muchas gracias!!
  #3 (permalink)  
Antiguo 25/10/2013, 08:03
JMitsu
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema al mostrar un dialogo

Eso pasa porque Swing trabaja todos los eventos de la interfaz como una cola en un thread independiente (EDT por sus siglas en ingés), por lo que si estamos ejecutando tareas dentro de ese thread, estaremos bloqueando las peticiones de actualización de la interfaz.

Intenta con lo siguiente:

Código Java:
Ver original
  1. public Boolean buscarDatoSQL(String usuario){
  2.  
  3. final SwingWorker worker = new SwingWorker() {
  4. Boolean existeUsuario=false;
  5.  
  6. while(consultaFinalizada()) {
  7. DialogoCargando =new DialogoCargando(); // es un hermoso dialogo con una etiqueta con un gif animado.
  8. }
  9.  
  10. existeUsuario=existeUsuarioEnBD(usuario);
  11.  
  12. return existeUsuario;
  13. }
  14. worker.execute();
  15.  
  16. }
  17.  
  18. public Boolean consultaFinalizada() {
  19.  
  20.     // codigo para saber si una consulta fue hecha
  21.    // el codigo de la consulta tiene que implementar una variable que diga
  22.   //  si una consulta se ha llevado a cabo o no.
  23.  }
  #4 (permalink)  
Antiguo 05/11/2013, 11:46
 
Fecha de Ingreso: agosto-2010
Ubicación: Montevideo
Mensajes: 107
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: Problema al mostrar un dialogo

Hola, Muchas gracias por tu respuesta... me ha servido de mucho

No quiero irme sin aportar nada así que dejo un ejemplo funcionando:

Código Java:
Ver original
  1. // las siguientes variables las declaré como propiedad de la clase
  2.                         DialogoCargando prop_DialogoCargando;
  3.                         prop_existeUsuario=null;
  4.  
  5.                          public Boolean buscarDatoSQL(String usuario){
  6.  
  7.                        prop_DialogoCargando =new DialogoCargando(); // el dialogo antes de abrir el nuevo hilo con la consulta
  8.  
  9.             SwingWorker<Void, Void> hiloBD =new SwingWorker<Integer, Void>() {
  10.  
  11.                 @Override
  12.                 protected Integer doInBackground(){ // es el método  que se ejecuta en el nuevo hilo
  13.                    
  14.                     prop_existeUsuario=existeUsuarioEnBD(usuario);
  15.                    
  16.                    
  17.                    
  18.                 }
  19.                
  20.                 @Override
  21.                 protected void done() {// es el metodo que se ejecuta luego que termina de ejecutarse doInBackground()
  22.                     comprobarUsuario();
  23.                     prop_controlador.prop_dialogoCargando.setVisible(false);// cierro el díalogo al terminar de ejecutarce la consulta
  24.                    
  25.                 }
  26.                
  27.                                        
  28.             };
  29.            
  30.             hiloBD.execute();


Gracias por tu ayuda he aprendido mucho investigando entorno al tema!!

Etiquetas: dialogo
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 07:50.