• Jueves 9 de Mayo de 2024, 22:52

Autor Tema:  Reloj Dando Vueltas Mientras Se Ejecutan Datos  (Leído 2201 veces)

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Reloj Dando Vueltas Mientras Se Ejecutan Datos
« en: Domingo 1 de Abril de 2007, 11:34 »
0
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.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
« Respuesta #1 en: Domingo 1 de Abril de 2007, 17:00 »
0
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.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
« Respuesta #2 en: Domingo 1 de Abril de 2007, 18:58 »
0
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 !!!

alemag

  • Miembro MUY activo
  • ***
  • Mensajes: 180
    • Ver Perfil
Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
« Respuesta #3 en: Lunes 2 de Abril de 2007, 06:38 »
0
Como podria hacer lo del .png ?? Me podrias orientar ???
Gracias.

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
« Respuesta #4 en: Lunes 2 de Abril de 2007, 15:51 »
0
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 !!!

silverfox

  • Miembro MUY activo
  • ***
  • Mensajes: 280
    • Ver Perfil
Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
« Respuesta #5 en: Martes 3 de Abril de 2007, 15:07 »
0
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

jpaler

  • Miembro MUY activo
  • ***
  • Mensajes: 479
    • Ver Perfil
Re: Reloj Dando Vueltas Mientras Se Ejecutan Datos
« Respuesta #6 en: Lunes 9 de Abril de 2007, 22:51 »
0
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 !!!