Hi, I attached my Cliente.java
I have 2 threads: Receptor and Transmisor. Receptor sends and receives
data from server, using method recibirPeticion(), forever (well, it sleeps
3 seconds). When Transmisor sends data, using method enviarPeticion(),
Receptor must wait until Transmisor ends his transmition.

I get 
java.lang.IllegalMonitorStateException: current thread not owner

What's wrong?

Thanks!

Carlos
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class Cliente implements Runnable
{
 static String respuesta="0";
 static Socket socket=null;
 static PrintWriter out=null;
 static BufferedReader in=null;
 static Thread receptor;
 static Thread transmisor;
 static String host=null;
 static boolean indicador=false;

 public static void main(String args[])
 {
  new Cliente();
 }

 public Cliente()
 {
  if(true)
  {
   try
   {
    host="132.248.59.4";
    socket=new Socket(InetAddress.getByName(host),4444);
    System.out.println("Creando hilo Receptor");
    receptor=new Thread(this,"Receptor");
    System.out.println("Creando hilo Transmisor");
    transmisor=new Thread(this,"Transmisor");
    receptor.start();
    transmisor.start();
   }
   catch(UnknownHostException e)
   {
    System.err.println("Host desconocido: "+host);
    System.exit(1);
   }
   catch(IOException e)
   {
    System.err.println("Error de Entrada/Salida con: "+host);
    System.exit(1);
   }
  }
 }

 public void run()
 {
  while(true)
  {
   if(Thread.currentThread().getName().equals("Receptor"))
    recibirPeticion();
   else if(Thread.currentThread().getName().equals("Transmisor"))
    enviarPeticion();
  }
 }

 public synchronized static void recibirPeticion()
 {
  System.out.println("Iniciando Receptor");
  try
  {
   while(indicador==true)
   {
    System.out.println("Deteniendo hilo Receptor");
    Thread.currentThread().wait();
    System.out.println("Continuando hilo Receptor");
   }
   System.out.println("Receptor recibe estado de la sala");
   out=new PrintWriter(socket.getOutputStream(),true);
   out.println("recibir");
   in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
   respuesta=in.readLine();
   System.out.println("La respuesta del Servidor es: "+respuesta);
   Thread.sleep(3000);
  }
  catch(Exception e)
  {
   System.out.println("Paso algo con el servidor: "+host);
   e.printStackTrace();
  }
 }

 public synchronized static void enviarPeticion()
 {
  indicador=true;
  System.out.println("Iniciando Transmisor");
  try
  {
   out=new PrintWriter(socket.getOutputStream(),true);
   System.out.println("El usuario carlos aparto una computadora");
   out.println("enviar");
   out.println("carlos");
   out.println("15");
   out.println("21:00");
   out.println("50");
  }
  catch(IOException e)
  {
   System.err.println("Error de Entrada/Salida con: "+host);
   e.printStackTrace();
  }
  indicador=false;
  System.out.println("Notificando...");
  Thread.currentThread().notifyAll();
 }
}

Reply via email to