SoloCodigo

Programación General => Java => Mensaje iniciado por: alemag en Domingo 1 de Abril de 2007, 11:34

Título: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: alemag en Domingo 1 de Abril de 2007, 11:34
Saludos compañeros, todavia no lo he logrado.
Quiero hacer un reloj de arena dando vueltas mientras se estan ejecutando unos datos, pero resulta que a veces el reloj se queda parado ( como si le diese mas prioridad a la ejecucion de los datos). Lo tengo en un hilo aparte, este codigo:

Código: Text
  1.         Runnable tarea=new Runnable() {
  2.       public void run()
  3.           {        
  4.             p_est_datos.removeAll();
  5.             p_est_datos.add(new JLabel("Se estan generando los resultados finales "));
  6.             JLabel et_icono=new JLabel();
  7.             et_icono.setIcon(new ImageIcon(getClass().getResource("/imagenes/estesi.gif")));
  8.             p_est_datos.add(et_icono);
  9.             p_est_datos.repaint();
  10.             p_est_datos.revalidate();
  11.           }
  12.      };  
  13.         Thread hilo=new Thread(tarea);
  14.         hilo.start();
  15.  
  16.      // y luego aqui llamaria a otra clase donde se realizan todos los datos.
  17.  

Como podria hacer que el reloj no dependiese de los datos que se ejecutan, es decir, que sea independiente y se muestre dicho gif de seguido ???

Gracias.
Título: Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: JuanK en Domingo 1 de Abril de 2007, 17:00
Cita de: "alemag"
Saludos compañeros, todavia no lo he logrado.
Quiero hacer un reloj de arena dando vueltas mientras se estan ejecutando unos datos, pero resulta que a veces el reloj se queda parado ( como si le diese mas prioridad a la ejecucion de los datos). Lo tengo en un hilo aparte, este codigo:
Código: Text
  1.  
  2.         Runnable tarea=new Runnable() {
  3.       public void run()
  4.           {        
  5.             p_est_datos.removeAll();
  6.             p_est_datos.add(new JLabel("Se estan generando los resultados finales "));
  7.             JLabel et_icono=new JLabel();
  8.             et_icono.setIcon(new ImageIcon(getClass().getResource("/imagenes/estesi.gif")));
  9.             p_est_datos.add(et_icono);
  10.             p_est_datos.repaint();
  11.             p_est_datos.revalidate();
  12.           }
  13.      };  
  14.         Thread hilo=new Thread(tarea);
  15.         hilo.start();
  16.  
  17.      // y luego aqui llamaria a otra clase donde se realizan todos los datos.
  18.  

Como podria hacer que el reloj no dependiese de los datos que se ejecutan, es decir, que sea independiente y se muestre dicho gif de seguido ???

Gracias.
cLARO ENTIENDO...


le punto es que estas bien encaminado usando hilos, pero estas mas encaminado usando el gif, en internet esta el programa que dibuja el reloj todo por si mismo, ese es el que debes usar.
Título: Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: jpaler en Domingo 1 de Abril de 2007, 18:58
el problema no es del hilo ni nada por el estilo...
...,el problema (segun entiendo yo), es q las interfaces swing, se paralizan
(es decir, no se repintan) cuando se esta llevando a cabo un proceso
de alta prioridad: un for, un while o algo por el estilo.
...,esto al parecer se debe a estructura y forma en q fueron creadas.

creo q hacer q un gif animado muestre su animacion mientras hay
ciclo recogiendo datos, es al complejo.
-----------------
si lo q quieres es informarle al usuario q hay un proceso q puede tardar y
q debe esperar... te sugiero q pruebes a cambiar el cursor del mouse
por un .png q diga espere o muestre un reloj o algo asi... esto si funciona.

Salu2 !!!
Título: Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: alemag en Lunes 2 de Abril de 2007, 06:38
Como podria hacer lo del .png ?? Me podrias orientar ???
Gracias.
Título: Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: jpaler en Lunes 2 de Abril de 2007, 15:51
listo... dejame y busco, creo q por hay tengo un ejemplo q una ves hice.
voy a ver si puedo adjuntarte por aki la imagen del cursor y el codigo
de como establecerlo.

listo !!!
Título: Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: silverfox en Martes 3 de Abril de 2007, 15:07
Hola...

El Swing tiene una cola de ejecución propia para la atención de los eventos de la aplicación.
Todo código que se ejecute llamado desde un actionListener, por ejemplo, el código que está dentro del actionPerformed, se ejecutará en la hebra de eventos de la aplicación, con lo que los eventos de repintado quedarán alterados.

Echa un vistazo a la clase SwingWorker, que te permite ejecutar en una hebra aparte una tarea pesada, fuera del tratamiento de los eventos de la aplicación.

Echa un vistazo a ver si te sirve esto, para más información, podeis acudir al API de Java.



Un saludo.


Silverfox
Título: Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
Publicado por: jpaler en Lunes 9 de Abril de 2007, 22:51
exacto... como dice silverfox... si hay algo DESENTE Y SERIO q se pueda
hacer, es con eso llamado SwingWorker...

...,pero sigo insistiendo, yo creo q no es nada sencillo.

Suerte !!!