2013-02-27 2 views
2

Я пытаюсь прочитать строку с консоли в java. Вот мой код:java nice console input

System.console().readLine("shell $ "); 

Это работает, но я хочу использовать любимые функции Linux как стрелки, чтобы переместить курсор (не вставляя ^[[C, как сейчас), стрелка вверх следует рассмотреть предыдущую команду, вкладка должна автозаполнение что-то (это а не полезный, я буду удовлетворен правильным поведением стрелок).

И - нет, я хочу использовать «чистое java» решение, а не JNI-оболочку для libreadline.

Есть ли какая-то функциональность в самом JDK или некоторых фреймворках, которые предоставляют такие функции?

+1

Это может быть излишним, но [JCurses] (http://javacurses.sourceforge.net/) может сделать много этого (и более реально) –

+0

Также что-то называется [Enigma Console library] (http: // enigma-shell.sourceforge.net/) –

ответ

2

Я должен ответить сам.

Я не нашел действительно чистую библиотеку java для ее обработки, но она может быть написана для * nix без всяких сомнений (System.in на самом деле не буферизуется).

Я использую jline2 (https://github.com/jline/jline2) https://github.com/jline/jline2now, потому что он маленький enogh и требует бинарных дополнений только для поддержки окон; Я тестировал его, и они работают без перекомпиляции на любой * nix и win32 OS, которые я когда-либо находил.

Итак, ответ: это возможно, но никто не написал такую ​​100% -ую библиотеку.

2

В Java нет таких встроенных функций. Для того, чтобы это сделать, т.е. создание консоли, способной делать такие вещи, как циклическое перемещение по предыдущим командам, перемещение со стрелкой, необходимо написать обработчик действий для таких ключей, который невозможен в java (как в встроенном функциональность), потому что вход буферизируется в java, и он становится покрасневшим, как только вы нажимаете . Введите.

Возможно, вы сможете сделать это в JNI, например, на родном языке Java. Насколько я знаю, вы можете посмотреть java console api, более подробную информацию об этом blog.

-1

Sunilkumkar из vmoksha

public class ReadConsoleSystem { 
    public static void main(String[] a``rgs) { 
System.out.println("Enter something here : "); 
try{ 
    BufferedReader bufferRead = new 
    BufferedReader(new  InputStreamReader(System.in)); 
    String s = bufferRead.readLine(); 
    System.out.println(s); 
} 
catch(IOException e) 
{ 
    e.printStackTrace(); 
} 

    }