#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. я понимаю; поскольку используется один ресурс, вы должны использовать некоторую форму синхронизации, чтобы позволить либо автору, либо пользователю использовать консоль, но не обоим, в любой момент времени. это далеко за рамки быстрого сообщения. есть ли шанс, что вы можете изменить подход? итог, то, о чем вы просите, нетривиально