Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/11/2011, 11:27
ferdyjuan
 
Fecha de Ingreso: noviembre-2010
Mensajes: 8
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Threads en Jframe

Buenas...tengo que decir que la solución que me diste no fue directamente la que necesitaba pero si provocó que me diera cuenta de lo que de verdad tenía que usar. En este caso se me ha solventado gran parte del problema con una clase interna Thread que maneja el dibujo sobre el panel. El problema viene a la hora de pausar y reanudar el dibujo.

areaResultados1
es una clase interna extendida a JPanel
play1pulsado atributo global q dice si se pulso el PLAY
listaPuntos1.size()>nPuntos1 marca si se ha pasado del numero de puntos que puede dibujar
class Hilo extends Thread{

public void run(){
while(true){
try{
Thread.sleep(100);//se espera 0.1 segundos
}catch (InterruptedException e) { }
if ((play1pulsado) && (listaPuntos1.size()>nPuntos1)){
areaResultados1.repaint();
nPuntos1++;
}
......
}
}
}


private void play1_1ActionPerformed(java.awt.event.ActionEvent evt) {
if (est_din){//estatico
.....
}
else{//dinamico
String botonText = null;
botonText = play1_1.getText();

if ( ("Play".equals(botonText)) || ("Empezar".equals(botonText)) ){
if ("Play".equals(botonText)){
play1_1.setText("Pause");
}
if ("Empezar".equals(botonText)){
play1_1.setText("Pausa");
}

if (!play1pulsado){ // se empieza inicialmente el calculo y dibujo
play1pulsado = true;
leerParametros(o1,1); //lee parametros
listaPuntos1 = o1.getArrayPuntos(); // lista de puntos
Hilo thO1 = new Hilo();
thO1.start();
}
else{ // se reanuda el dibujo de puntos
thO1.resume();
}
}
else if ( ("Pause".equals(botonText)) || ("Pausa".equals(botonText)) ){ // se pausa el dibujo de puntos
if ("Pausa".equals(botonText)){
play1_1.setText("Empezar");
}
if ("Pause".equals(botonText)){
play1_1.setText("Play");
}
thO1.interrupt();
}
}

}

El problema recae aqui cuando vuelvo a pulsar el boton de PLAY para pausar salta una interrupcion de las chungas con interrupt y wait. Con yield no salta nada, pero no para la ejecucion. Muchas gracias si puedes aportar algo ;)