Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Ошибка, если System.in.read внутри finally/catch


Автор: Zhigool 7.1.2013, 00:02
Здравствуйте!
Консольное приложение. Пытаюсь реализовать закрытие консоли после нажатия на любую клавишу. 
Код

        try 
        {
            String aString = Double.toString(P.Calculate(Tokens, true));
            System.out.print("Результат: " + aString);
        }catch (MyExceptions e)
        {
            System.err.println("Приложение будет завершено!");
        }finally
        {
                        System.err.println("Нажмите любую клавишу для завершения");
            System.in.read();
        }


Но если System.in.read() в теле catch или finally, то выводит ошибку:

Приложение будет завершено!
Нажмите любую клавишу для завершения
Exception in thread "main" java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at Main.main(Main.java:372)

В чем дело? 

ЗЫ:
Windows 8, Eclipse Juno, JDK 7_10.

Автор: LSD 7.1.2013, 14:42
Цитата(Zhigool @  7.1.2013,  01:02 Найти цитируемый пост)
Но если System.in.read() в теле catch или finally, то выводит ошибку:

Само по себе System.in.read() в catch или finally никаких ошибок не вызывает, ошибка в другом. Скорее всего кото-то успел закрыть System.in, проверяй свой код.

Автор: Zhigool 7.1.2013, 14:53
LSD, спасибо! Помогли. Я в другом методе открывал и закрывал входной поток  smile 

Автор: LSD 7.1.2013, 16:02
Есть простое правило, закрывает ресурс тот кто его открывал. Метод не должен закрывать поток если не он его открывал.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)