Эхо библиотеки JLine

Я использую библиотеку JLine для обработки ввода и вывода консоли.

Terminal terminal = TerminalFactory.getFlavor(TerminalFactory.Flavor.valueOf("UNIX"));
terminal.init();
terminal.setEchoEnabled(true);
ConsoleReader console = new ConsoleReader(System.in,System.out);
int key = console.readCharacter();

Я использую JLine v2.6. Эхо не работает. Что не так с приведенным выше кодом? Кто-нибудь может помочь?

Надоело искать другие библиотеки, такие как JLine. Есть ли другая библиотека Java для обработки ввода с консоли?


person emptythecup    schedule 15.06.2012    source источник
comment
Просто мысль, если вы устали от поиска других [ов], то, поскольку jLine2 активно и с энтузиазмом поддерживается, почему бы не внести свой вклад в это? Чаша кажется мне наполовину полной..   -  person earcam    schedule 03.12.2012


Ответы (2)


JLine использует собственный код на каждой платформе, на которой вы его запускаете. Некоторые терминалы на некоторых платформах не имеют правильных настроек для работы прямо из коробки.

Поведение по умолчанию различается между платформами из-за собственных терминалов на этих платформах, но оно работает очень хорошо, если вы правильно его настроили и настроили. Скорее всего, ваша проблема заключается в настройках эмуляции терминала и не имеет никакого отношения к JLine.

Тем не менее, я добился большого успеха в OSX (bash), Windows и RHEL/Centos (bash).

person Community    schedule 15.06.2012

Кажется, что readCharacter(); ConsoleReader не повторяется, но readLine() и readLine(String prompt) повторяются.

Глядя на (легкодоступный) источник метода console.readCharacter(), он явно вызывает (частный) clearEcho(), который очищает эхо, перемещая указатель назад.

Хотя документация немного скудна, поскольку jLine разработана для совместимости с GNU readLine и BSD editLine, акцент, похоже, делается на обеспечение поддержки консоли для line обработка.

Я предполагаю, что обработка символов предусмотрена, но вы будете нести ответственность за повторение символа.

person earcam    schedule 02.12.2012