Как очистить экран консоли при вводе ввода в Java? - PullRequest
1 голос
/ 16 февраля 2020

Есть ли способ очистить консоль, когда программа Java обнаруживает, что пользователь вводит некоторые данные?

Я выполняю программу, которая выполняет следующие действия:

User: //enter username
//show data of the username 

Я хочу сделать так, чтобы пользователь мог искать столько пользователей, сколько он хочет, пока он не закончит выполнение. Чтобы было понятно и красиво, после каждого поиска имени пользователя я хочу очистить экран, когда программа обнаруживает, что пользователь что-то печатает (заполняя буфер).

Есть ли способ сделать это?

Это код, который я использую для очистки консоли (он не определяет, когда пользователь печатает):

public static void clearScreen() {
    System.out.print("\033[H\033[2J");
    System.out.flush();
}

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Вы не можете использовать System.in без нажатия клавиши ENTER в конце. Это единственный способ. System.in не знает о вводе пользователем, пока не будет нажата кнопка ввода. Так что, если вы используете для этого обычную командную строку, это не сработает, и вам придется придерживаться различных необработанных командных строк, таких как jline

Например:

Terminal terminal = TerminalBuilder.builder().system(true).jna(true).build();
terminal.enterRawMode(); //this enters into a raw mode and get's input on reader
reader = terminal.reader();
//finally
reader.close();

Вы можете проверить это. Хотя не имеет смысла вводить больше зависимостей, если вы действительно этого не хотите, и можете просто придерживаться простого while loop

Если вы используете maven, вот зависимость, которую вы можете использовать.

<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline</artifactId>
</dependency>
0 голосов
/ 16 февраля 2020

По умолчанию терминал может выводить текст только построчно.

Для перемещения курсора, изменения цвета или очистки экрана требуются специальные escape-последовательности, которые интерпретируются эмулятором терминала, в котором вы запускаете приложение .

C программы в Linux обычно делают это через библиотеку ncurses.

Java программы могут делать что-то похожее с Lanterna (https://github.com/mabe02/lanterna ) но в пределах окна GUI. См. Также эту статью, в которой перечислены другие альтернативы и показано, как использовать Lanterna: http://rememberjava.com/cli/2017/01/22/ncurses_terminal_libs.html

...