duda con wait() y notify()

Iniciado por m@o_614, 12 Septiembre 2015, 01:13 AM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos

Estoy haciendo el siguiente código en el que tengo dos hilos, cada uno de los cuales
va a imprimir un contador en un área de texto. En el código tengo un botón, el cual
se va a bloquear(deja de imprimir) si hago clic en el botón y se desbloquea una vez que haga clic otra
vez en el botón. Para esto traté de usar un wait() y un notify, pero creo que no los
estoy usando correctamente porque la primera vez que oprimo el botón si se bloquea
pero a la segunda no se desbloquea

Código (java) [Seleccionar]
import java.awt.*;
import java.util.Random;
import java.awt.event.*;
import javax.swing.*;

class Hilo extends Thread{
private int cuenta = 0;
private long pausa;
private boolean puedeImprimir = true;
private JTextArea areaTexto;

Hilo(long milisegundos,JTextArea cuadroTexto){
pausa = milisegundos;
    areaTexto = cuadroTexto;
}

public void ocurrioBotonazo(){
    if(puedeImprimir)
       this.puedeImprimir = false;
    else
    {
    this.puedeImprimir = true;
    reanudar(this);
    }
}


public synchronized void reanudar(Hilo hilo)
{
if(hilo.puedeImprimir)
   hilo.notify();
}

public void run()
{
while(this.puedeImprimir)
{
try
{
this.imprimirContador();
Thread.sleep(pausa);
this.cuenta++;
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}

public void imprimirContador(){
String tiempo;
    tiempo = Integer.toString(cuenta);
    areaTexto.setText(tiempo);
}
}

class Interfaz extends JFrame implements ActionListener{
private JTextArea areaTexto,areaTexto2;
private JButton boton;
private Hilo hilo,hiloEvento;

Interfaz()
{
areaTexto = new JTextArea(10,7);
areaTexto2 = new JTextArea(10,7);
hilo = new Hilo(2000,areaTexto);
hiloEvento = new Hilo(1000,areaTexto2);
boton = new JButton("Pausar/Reanudar");
this.getContentPane().add(boton,BorderLayout.SOUTH);
this.getContentPane().add(areaTexto,BorderLayout.WEST);
this.getContentPane().add(areaTexto2,BorderLayout.EAST);

hilo.start();
        hiloEvento.start();
       
boton.addActionListener(this);
}

public void actionPerformed(ActionEvent event)
{
      hiloEvento.ocurrioBotonazo();
}
}


public class MensajesHilos {

public static void main(String[] args){
Interfaz i = new Interfaz();
i.setTitle("Hilos de Control");
i.setBounds(200, 200, 300, 240);
i.setVisible(true);
}
}



gracias de antemano