Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/02/2014, 20:47
rodo593
 
Fecha de Ingreso: agosto-2013
Mensajes: 90
Antigüedad: 10 años, 8 meses
Puntos: 1
[Consulta] Duda con un hilo

Hola.

Estoy haciendo un juego de memoria, cuando se pulsa el boton "Juego nuevo" intento simular el efecto de revolver las fichas y luego poner imagen por defecto a todas.

Como he utilizado el método Thread.sleep(); entonces he creado un hilo para que haga el efecto de revolver.

Aqui como lo he creado:

Código Java:
Ver original
  1. Runnable revolver = new Runnable() {
  2.             @Override
  3.             public void run() {
  4.                 try {
  5.                     for (int x = 0; x < 4; x++) {
  6.                         parejaAleatoria();
  7.                         jbtn_juegoNuevo.setEnabled(false);
  8.                         for (int y = 0; y < botonesParejas.length; y++) {
  9.                            
  10.                             botonesParejas[y].setActionCommand(Integer
  11.                                     .toString(posicionesImagenes[y]));
  12.                             botonesParejas[y].setIcon(getImagenPareja(Integer
  13.                                     .parseInt(botonesParejas[y]
  14.                                             .getActionCommand())));
  15.                         }
  16.                         Thread.sleep(300);
  17.                     }
  18.                     jbtn_juegoNuevo.setEnabled(true);
  19.                 } catch (InterruptedException iex) {
  20.  
  21.                 }
  22.  
  23.             }
  24.         };
  25.         Thread hilo = new Thread(revolver);

Lo que pasa es que luego cuando hago uso del método "nuevoJuego();" yo llamo al método start del hilo.
Código Java:
Ver original
  1. private void nuevoJuego() {
  2.        
  3.         parejaAleatoria();
  4.         for (int x = 0; x < botonesParejas.length; x++) {
  5.             botonesParejas[x].setEnabled(true);
  6.             botonesParejas[x].setActionCommand(Integer
  7.                     .toString(posicionesImagenes[x]));
  8.             botonesParejas[x].setIcon(getImagenPareja(Integer
  9.                     .parseInt(botonesParejas[x].getActionCommand())));
  10.         }
  11.  
  12.         hilo.start();
  13.  
  14.         tiempo.schedule(task, 0, speed);
  15.  
  16.         intentos = 200;
  17.         jlbl_intentos.setText(Integer.toString(intentos));
  18.         primerToque = false;
  19.     }

La primera vez que se ejecuta el hilo si lo corre bien, pero cuando vuelvo a empezar otro juego me tira IllegalThreadStateException. El error se da cuando llamo al método start();

¿como podría para crear un hilo que se ejecute cada vez que quiero simular el efecto de revolver?

Muchas gracias.

PD: He utilizado un hilo aparte ya que si utilizo Thread.sleep(); me detiene todo el hilo principal.