NoSuchElementException при установке тайм-аута на сокете - PullRequest
0 голосов
/ 13 мая 2011

Я хотел установить тайм-аут, когда клиент прочитал. подпрограмма должна выдавать InterruptedIOException, но вместо этого она выдает NoSuchElementException на System.out.println("echo: " + _in.nextLine()); что я делаю неправильно?

это мой метод

public void startUserInput()
{
    try {
        _out = new PrintWriter(_echoSocket.getOutputStream(), true);
        _in  = new Scanner(new InputStreamReader(_echoSocket.getInputStream()));

        Scanner stdIn = new Scanner(new InputStreamReader(System.in));
        System.out.print("Input: ");
        while (stdIn.hasNextLine()) {
            _out.println(stdIn.nextLine());
            System.out.println("echo: " + _in.nextLine());
            System.out.print("Input: ");
        }
        stdIn.close();

    }catch (InterruptedIOException exception){
        System.err.println("The server is not responding " + _serverHostname);

    }
    catch (IOException e) {
        System.out.println("error"  + e.getLocalizedMessage());
    }}

и это мое соединение

public boolean establishConnection()
{
    System.out.println ("Connecting to the host " +
            this.getServerHostname() + " au port " + this.getServerPort());

    try {
        _echoSocket = new Socket();
        _echoSocket = new Socket(this.getServerHostname(), this.getServerPort());
        _echoSocket.setSoTimeout(10000);
        System.out.println(_echoSocket.getOutputStream());
        return _echoSocket.isConnected();

    } catch (UnknownHostException e) {
        System.err.println("Unknown host: " + this.getServerHostname());
        return false;



    } catch (IOException e) {
        System.err.println("Error while connecting to the server : " + 
                this.getServerHostname() + ":" + this.getServerPort());
        return false;
    }
}

Спасибо

1 Ответ

2 голосов
/ 13 мая 2011

Причина в том, что при вызове _in.nextLine() нет строки для чтения из объекта Scanner _in.

То, что вы делали в цикле while, было для проверки stdIn.hasNextLine(), ноВы не проверяли, есть ли у _in функция nextLine (), которую можно прочитать.

Для получения подробной информации об исключении вы можете проверить:

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Scanner.html#nextLine()

надеюсь, это поможет :) Ура!

...