java- ввод букв в консоль перед вводом пользователем

#java #io #console-application #system.out #system.in

#java #io #консоль-приложение #system.out #system.in

Вопрос:

Я пишу простой чат с сокетом, используя консоль для вывода сообщений. Проблема в том, что когда один пользователь вводит сообщение и одновременно получает его, его ввод прерывается:

 I: writing my input here, but
Other_user: hi! here is a message for you.
I: it splits to different lines, which is 1) very inconvenient 2) cannot see which simbols i deleted if press backspace
  

Итак, я спрашиваю, как я могу избежать этого

(что-то вроде: если сообщение получено, проверьте ввод символов; если они есть, запомните их, удалите последний штрих в консоли, распечатайте сообщение, а затем воссоздайте этот штрих).

РЕДАКТИРОВАТЬ: прикрепленное изображениечередование сообщений

Комментарии:

1. это просто консоль, какой вы хотите, чтобы она была, поэтому я бы не ожидал чудес 🙂 Ввод будет прерван, поскольку нет ничего, что заставило бы ваш вывод ждать, когда будет введен и еще не отправлен sth. В обычном чате это выглядело бы так же, но, как вы заметили, у вас есть два отдельных окна: одно для ввода, а второе просто мигает вашими сообщениями и сообщениями друзей.

2. Вы нашли решение?

3. @Ufkoku нет. насколько я помню, я пришел к выводу, что операции со стандартным выводом не обеспечивают такой возможности

Ответ №1:

трудно сказать без конкретного кода, но можно использовать два потока: один для обработки ввода сокета, другой для вывода. прикрепите их к System.in и System.out соответственно. похоже, вы можете использовать только один поток для выполнения обоих.

Комментарии:

1. Не вижу, как это помогает. Оба System.in и System.out работают с консолью, поэтому естественно, что запись в консоли чередуется с печатью новых букв, вот так:

2. добавлено изображение к сообщению

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