Foro de elhacker.net

Programación => Java => Mensaje iniciado por: zheo en 3 Enero 2005, 04:55 am



Título: [JAVA] ¿Cómo uso Timers en Java?(J2ME)
Publicado por: zheo en 3 Enero 2005, 04:55 am
Bueno, estoy haciendo mi primer juego para J2ME, ya tengo hecha toda la interface -funcionando en el movil wink.gif -y me falta hacer el bucle principal del juego, usease, el juego jeje.
Ya tengo planificadas todas las estructuras de datos y algoritmos a usar.
El caso es que sólo me hace falta una cosa para hacer el juego: medir el tiempo.
Ésto es necesario para hacer bajar la ficha una casilla en determinados intervalos, y aquí llega mi duda.
En principio sé que tengo que hacer un objeto de la clase Timer, que será el contador de tiempo, y luego un objeto de la clase TimerTask e implementar su método Run, (ya que implementa el Interface Runnable), que será lo que se ejecute cada determinado lapso de tiempo.

El caso es que no se si lo he entendido bien, TimerTask actua como un Hilo de ejecución, y teniendo en cuenta que lo voy a utilizar dentro de otro hilo (el bucle del juego es otro hilo) no se si eso podría acarrearme problemas de sincronización.
¿Alguien sabe si esta es más o menos la manera correcta de hacerlo? ¿Conoceis algún otro método o forma mejor de hacerlo?

Un saludo y gracias anticipadas.


Título: Re: [JAVA] ¿Cómo uso Timers en Java?(J2ME)
Publicado por: AnKeR en 21 Enero 2005, 12:34 pm
Buenas....

Yo no suelo utilizar la TimerTask, lo que hago es utilizar la clase Timer únicamente, asiciandole un delay, y un ActionListener, al que llama cuando el delay se acaba. -> Timer(int delay, ActionListener listener) ;     
Me parece una manera mas fácil que la del TimerTask, pero bueno luego puedes hacerlo como quieras.
Sobre los timers en java, pues que a veces dan errores, porque llevan un thread interno, y si paras el thread principal  en el que están pues siguen ejecutandose (el thread interno), pudiendo dar otros problemillas... (cosa que a mi me paso :S ).

Un ejemplo de la API de como funciona:

Código:
int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          //...Perform a task...
      }
  };
  new Timer(delay, taskPerformer).start();
Pues eso, suerte con el juego.
Salu2o3


Título: Re: [JAVA] ¿Cómo uso Timers en Java?(J2ME)
Publicado por: Slasher-K en 21 Enero 2005, 19:22 pm
Eso es lo que se llama race condition ;) y puede provocar resultados muy impredecibles y sobre todo dañinos.


Título: Re: [JAVA] ¿Cómo uso Timers en Java?(J2ME)
Publicado por: zheo en 22 Enero 2005, 04:26 am
Se me pasó este hilo, menos mal que Slasher Keeper lo reflotó :P

Bueno, al final lo acabé haciendo de la manera más tradicional:
System.CurrentTimeMillis() y calculando el tiempo transcurrido entre frames :P

El juego es funcinal, de hecho lo tengo en el movil y rula :P
Aunque quiero pulirlo un pocoy  lo presentaré en sociedad xD xD Es que estoy de exámenes :(
A ver si puedo poner unas capturas, pero ahora no tengo tiempo (lo tengo en el portatil y me voy en seguida)