Не удалось поймать SocketTimeoutExeption

Я пытаюсь поймать SocketTimeoutException, чтобы мой сокет оставался активным, и я мог продолжить чтение своей программы. К сожалению, как бы я ни пытался поймать тайм-аут чтения, я не могу, и поэтому приложение закрывается.

У меня есть сокет и setsotimeout до 30000.

Я вызываю input.readLine() и хочу поймать время ожидания и продолжить. Буду признателен за любую оказанную помощь.

String response;
try {
        response = input.readLine();
        System.out.println("Server Response: " + response);
        return;
} catch(AssertionError e){
    //we timed out. print to user that timeout occured,
    //try command again
    System.out.println("TIMEOUT: Please try your command again.\n"
        + "If you created a game, join an existing or create again.");
} catch (SocketTimeoutException e) {
    //we timed out. print to user that timeout occured,
    //try command again
    System.out.println("TIMEOUT: Please try your command again.\n"
        + "If you created a game, join an existing or create again.");
} catch (IOException ex) {
//do nothing
}

вывод:

java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:150)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.readLine(BufferedReader.java:324)
at java.io.BufferedReader.readLine(BufferedReader.java:389)
at Client.main(Client.java:97)

person Elliott    schedule 01.06.2014    source источник
comment
что находится в Client.java:97?   -  person Rod_Algonquin    schedule 01.06.2014
comment
Это вызов input.readLine(). Я не против тайм-аута... Я намеренно хочу тайм-аут через 30 секунд. Но я не хочу, чтобы мое приложение останавливалось из-за этого. Я хочу поймать этот тайм-аут и просто продолжить свой путь.   -  person Elliott    schedule 01.06.2014
comment
Ах, на самом деле, это другой метод readLine(). Спасибо за вашу помощь. У меня не было socketException в правом блоке catch. Это будет причиной.   -  person Elliott    schedule 01.06.2014


Ответы (1)


Либо это не настоящий код, либо у вас где-то есть собственный класс SocketTimeoutException, либо вы импортировали не тот. Я предлагаю вам поместить что-нибудь полезное в блок catch IOException. Вы можете получить сюрприз.

Почему вы ловите AssertionError и рассматриваете это как тайм-аут, для меня загадка.

person user207421    schedule 01.06.2014
comment
Первоначально я просто ловил SocketException, однако я прочитал в Интернете о какой-то ошибке Assertionerror и бросил ее как черта. На данный момент я совершенно озадачен тем, почему я не могу поймать тайм-аут. - person Elliott; 01.06.2014