Pregunta

¿Hay una manera fácil saltarse el método readLine () en Java si se tarda más que, por ejemplo, 2 segundos?

Este es el contexto en el que estoy haciendo esta pregunta:

public void run()
{
    boolean looping = true;
    while(looping) {
        for(int x = 0; x<clientList.size(); x++) {
            try {
                Comm s = clientList.get(x);
                String str = s.recieve();
                // code that does something based on the string in the line above
            }
            // other stuff like catch methods
        }
    }
}

Comm es una clase que escribí, y el método, que contiene un BufferedReader llama "en" recibir, es la siguiente:

public String recieve()
{
    try { if(active) return in.readLine(); }
    catch(Exception e) { System.out.println("Comm Error 2: "+e); }
    return "";
}

Me he dado cuenta de que los topes de programa y espera a que el flujo de entrada tengan algo que leer antes de continuar. Lo cual es malo, porque necesito el programa para bucle (como se realiza un bucle, que va a todos los demás clientes y pide la entrada). ¿Hay una manera de saltarse el proceso de readLine () si no hay nada para leer?

También estoy bastante seguro de que no me estoy explicando bien, así que por favor me preguntas si estoy siendo confuso.

¿Fue útil?

Solución

El tiempo de espera por sí sola no es una buena idea. Use un hilo por cliente (o usar E / S asíncrona, pero a menos que esté construyendo algunas aplicaciones de alto rendimiento, eso es innecesariamente complicado).

En cuanto al propio tiempo de espera, hay que hacerlo en la corriente que está encapsulado. Véase, por ejemplo ¿Cómo puedo configurar un tiempo de espera contra un BufferedReader en base a una URLConnection en Java?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top