Как я могу предотвратить прерывание командной строки при печати строк?

Я пытался найти ответ на этот вопрос какое-то время, но я новичок, и у меня мало надежды, лол

В Java у меня сейчас есть два потока:

  • (основной класс) Thread A имеет цикл while, прослушивающий команды с помощью Scanner.nextLine()

  • Поток B распечатывает «тест» каждую секунду

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

Выход:

      test
test
commantest
dctest
ommandtest
test
test

Как мне предотвратить это, чтобы я мог вводить команды без перерывов? Я открыт для использования Escape-кодов ANSI и JCurses (или любых библиотек на самом деле) :)

Спасибо!

1 ответ

Невозможно предотвратить это. Два потока, по сути, используют одну и ту же консоль, которая для вас выглядит запутанной, но на самом деле работает именно так, как должна. Обратите внимание, что и чтение, и запись должны по-прежнему работать, несмотря на то, что текст на вашей консоли искажен.

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

Другие вопросы по тегам