Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/07/2011, 16:28
Avatar de Ferkhis
Ferkhis
 
Fecha de Ingreso: mayo-2011
Ubicación: Medellín
Mensajes: 52
Antigüedad: 13 años
Puntos: 2
Pregunta Cómo Cancelar lectura de DataInputStream en un while dentro de un Hilo (thread)

Hola al foro!

En la parte final de mi programa con sockets y threads, he tenido un último problema que no había detectado... Ya pude hacer funcionar el hilo y el while que me leen la informacion del socket y todo funciona una maravilla, sin embargo ahora el problema consiste es en detener el hilo correctamente, o mejor dicho no tanto el hilo, sino CANCELAR la lectura de datos del socket, que se queda esperando nuevos datos dentro del while, pero como el socket se cierra, entonces se dispara un error y la aplicación se cierra... Intenté quitar el error poniendo el el catch un return y ya no sale el error pero la aplicación se sigue cerrando, y el DataInputStream queda inhábil para trabajar en una próxima conexión... este es mi código, por si alguien puede ayudarme.

static boolean Flag = true;
Thread SocketThread = new Thread()
{
public void run()
{
while(Flag == true)
{
byte IncomingArray[] = new byte[200];
try
{
Conexion.InputMEssage.read(IncomingArray); //se lee el flujo de entrada del socket y se almacena en un array
}
catch(Exception e)
{
if (Flag == false)
{//Evita que se produzca una excepcion o error si InputMEssage no puede leer del socket
Conexion.InputMEssage = null;
return;
}
e.printStackTrace();
}
String StringArray = new String(IncomingArray);
Ventana.InputMSG = StringArray;
//se envia la informacion a ser procesada en una funcion
Ventana.InputMSG = ProcessPackets.ProcessPacket(Ventana.InputMSG);
if (!Ventana.InputMSG.equals(""))
{//se envia la informacion procesada al campo de texto que almacena el chat
Ventana.txtChat.setText(Ventana.txtChat.getText() + "\n" + Ventana.InputMSG);
Ventana.txtChat.setSelectionStart(Ventana.txtChat. getText().length());
Ventana.InputMSG = "";
}
}
}

Como ven, ahí puse un flag para controlar la ejecución del thread, sin embargo el codigo se queda en espera es en Conexion.InputMEssage.read(IncomingArray); por lo tanto siempre alcanza a ejecutarse 1 vez de forma incorrecta y dispararme el error y cerrarme la ventana... Gracias por la ayuda!