Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Консоль


Автор: Demetrio 24.9.2010, 13:43
Есть некое консольное приложение. Я его запускаю через ProcessBuilder и получаю результат. 
Но у этого же приложения есть консольный режим, который ожидает ввод команд и выводит результат в коносль.

Как мне реализовать через java такой режим "ожидания команд"? Чтобы каким-то образом в поток ожидания подсоовывать команды команд и получить результат.

Навроде запущенного telnet, но так  чтобы сессия не прерывалась.

Зарнанее спасибо
Дмитрий

Автор: jk1 24.9.2010, 14:35
Код

process.getInputStream();
...
process.getOutputStream();

В один пишем, из другого читаем.

Автор: LSD 24.9.2010, 15:30
http://forum.vingrad.ru/index.php?showtopic=84072&view=findpost&p=649814

Автор: Demetrio 24.9.2010, 23:46
спасибо.
то, что надо. Но на пути к полной победе столкнулся с какой странной проблемой.
Поток выдает только первые 20 строк. Причем, когда я делаю трассировку, то все нормально.  Может каким-то образом ограничивается количество строк потока для команды . Ощещение, что идет какой-то постраничный вывод.
Код

try {
                String line = null;
                while (reader.ready() && (line = reader.readLine()) != null) {
                    System.out.println(line);
                    list.add(line);
                }
            } catch (IOException ex) {
                
            }


p.s.
Выяснил, что если дать в поток writer.write(System.getProperty("line.separator")+System.getProperty("line.separator")+System.getProperty("line.separator"));
то проблема исчезает. Видимо какой постраничный вывод существует.


Автор: priam220 25.9.2010, 16:12
Есть такой класс Console, чаще всего я его выдел возращаемым System.console методом, но не видел его реального применения. Хотелось бы узнать зачем этот класс нужен и зачем нужен System.console, если вывести на консоль можно через System.out без всяких заморочек с null и т.п.

Автор: LSD 27.9.2010, 19:02
Цитата(priam220 @  25.9.2010,  17:12 Найти цитируемый пост)
Есть такой класс Console, чаще всего я его выдел возращаемым System.console методом, но не видел его реального применения. Хотелось бы узнать зачем этот класс нужен и зачем нужен System.console, если вывести на консоль можно через System.out без всяких заморочек с null и т.п.

Он предназначен именно для работы с консолью, если приложение запустить через javaw или из другого приложение, так чтобы окно консоли не выводилось, то и System.console() вернет null. А вот стандартные потоки ввода/вывода будут функционировать.

А так у консоли есть пара преимуществ:
- нормальная работа с кодировками в системах где кодировка системы и консоли различается (например в Windows)
- поддержка ввода пароля (ввод отображается звездочками)
- утилитные методы для удобного ввода данных пользователем
Ну и плюс консоль это символьное устройство, а стандартные потоки ввода/вывода бинарные.

Автор: priam220 30.9.2010, 19:57
LSD,  спасибо. Немножко стало понятнее. 

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