problema con BufferedReader

Iniciado por wilmer.rondon, 15 Junio 2007, 20:51 PM

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

wilmer.rondon

hola:

Tengo un ciclo para leer de buffer y luego imprimir lo que leyo en un TextArea y la manera de detener el ciclo es cuando el buffer sea Null.

en el Text Area deberia aparece escrito la salida de un Script que ejecuto en UNIX como se ve en color rojo.

Ingrese una opcion [1]Prueba   [2]Salir

una vez que aparece esto se debe ingresar la opcion y sigue la ejecucion del script.

pero aparentemente el buffer nunca se hace null y se queda imprimiendo siempre lo mismo en un ciclo infinito y no se le pueden enviar los datos para la seleccion de la opcion [1] o [2]...

alguien tendra alguna sugerencia para que esto no suceda??

este es el codigo del hilo que lee el buffer de entrada.

muchas gracias

prestar atencion en esta parte del codigo

                                        while ((line = in.readLine()) != null)
                                        {
                                                t.printOut(line);
                                        }



        class InputThread implements Runnable
        {
                BufferedReader in;
                Main t;
                public boolean keepGoing;

                public InputThread(BufferedReader in, Main t)
                {
                        this.in = in;
                        this.t = t;
                        this.keepGoing = true;
                }

                public void quitIt()
                {
                        keepGoing = false;
                }

                public void run()
                {
                        while (keepGoing)
                        {
                                String line;
                                try
                                {
                                        while ((line = in.readLine()) != null)
                                        {
                                                t.printOut(line);
                                        }
                                }
                                catch (IOException e) 
                                {
                                        t.printOut(e.getMessage());
                                }
                        }
                }
        }

flowflow

Hola, yo creo que tienes el problema en el while del keepGoing ya que nunca lo pones a false. Podrias solucionarlo de la siguiente forma:

public void run()
{

                         while (keepGoing)
                        {
                                String line;
                                try
                                {
                                        while ((line = in.readLine()) != null)
                                        {
                                                t.printOut(line);
                                        }
                                }
                                catch (IOException e) 
                                {
                                        t.printOut(e.getMessage());
                                        e.printStackTrace();
                                }
                               
                                 quitIt();

                        }
}



Aunque realmente no entiendo para que usas ese segundo while, asi que tb podria quedar así:

public void run()
{
         String line;
         try
        {
                    while ((line = in.readLine()) != null)
                    {
                             t.printOut(line);
                     }
         }
         catch (IOException e) 
         {
                 t.printOut(e.getMessage());
                 e.printStackTrace();
         }
}




Espero haber sido de utilidad, si me he confundido en algo hazmelo saber please.

P: Es recomendable añadir  e.printStackTrace(); dentro de los catch ya que da mas info del error


wilmer.rondon

hola:
gracias por tu sugerencia...

la verdad solo modifique esta parte del codigo y me funcionó perfectamente:

esta linea de codigo

process = Runtime.getRuntime().exec("/bin/bash");

lo cambie por esta linea

process = Runtime.getRuntime().exec("/bin/sh");

muchas gracias por tu ayuda...