powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Небольшая проблема с консколью
8 сообщений из 8, страница 1 из 1
Небольшая проблема с консколью
    #39314920
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Есть небольшая проблема с консолью.
Мне нужно сделать "интерфейс" к консольному чату. Я сделал небольшую эмуляцию работы чата, т.е. я раз в секунду в отдельном потоке вывожу сообщение в консоль. Проблема в том, что хоть я и могу в это время писать и отправлять корректные сообщения в консоли, новые сообщения из потока "забивают" мой ввод и выходит что-то вроде:

Hello world!
Hello world!
МоеHello world!
СообщениеHello world!
Hello world!
Hello world!
Hello world!

Внимание вопрос! :) Можно ли как-то сделать так, чтобы ввод все время оставался в самом низу консоли? (При этом не хотелось бы останавливать вывод.)

P.S.
Вывод осуществляю с помощь System.out.println()

Чтение идет с помощью:
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();

Балуюсь в IntelliJ IDEA
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39314925
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Единственное что еще есть в JSE "из коробки" это вот
http://docs.oracle.com/javase/7/docs/api/java/io/Console.html
Не так уж и много.
Поэтому я бы обратил внимание на что нибудь вот такое:
https://github.com/mabe02/lanterna
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39314996
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Спасибо за ответ.
Поправьте если ошибаюсь, но мне показалось, что http://docs.oracle.com/javase/7/docs/api/java/io/Console.html делает все то же самое, но с использованием других методов. Как я понял, что получаем консоль ассоциированную с текущей JVM (ту ли консоль, которая в IntelliJ IDEA) и можем делать с ней то же самое.

https://github.com/mabe02/lanterna - хороший вариант для чата. Похоже, это и нужно использовать. Хотя у меня в задании написано, что нужно сделать серверный чат, а GUI делать не нужно. Вот и озадачился с обычной консолью. Lanterna, похоже, это уже как раз GUI. Получается, что в стандартной консоли можно сделать только кривой чат :) (Обновлять входящие только после ввода пользователя)
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39315585
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975,
Можно сделать с помощью команд, например list<enter> - выводит последние сообщения из чата, а post message <enter> - шлет и т.д.
Что-бы сделать более продвинутый вариант придется использовать ncurses, там можно зафигачить прямо окошко, куда пишутся сообщения, затирая предыдущие, и одновременно вводить текст.
https://sourceforge.net/projects/javacurses/
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39315755
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Хотя у меня в задании написано, что нужно сделать серверный чат, а GUI делать не нужно.
Ну, тогда и не тратьте время. Сделайте самый простой вариаинт. Ваш код скорее всего запускать не будут. Просто прочитают, особенно серверную часть. А вы так напираете на клиента.
Хотя JFrame+BorderLayout+JTextField x2 это работы на 10 минут. Для вас, возможно, на 30.
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39316552
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,

https://sourceforge.net/projects/javacurses/ по смыслу очень похоже на https://github.com/mabe02/lanterna.
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39316554
kir86975
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Я решил проблему просьбой "Ведите Enter чтобы написать сообщение". В обработчике не даю отправлять сообщения пока не придет пустая строка. :) После ввода пустой строки останавливаю поток сообщений и жду ввода. После ввода снова запускаю :)

Всем спасибо!
...
Рейтинг: 0 / 0
Небольшая проблема с консколью
    #39316569
myaucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kir86975Blazkowicz,

Я решил проблему просьбой "Ведите Enter чтобы написать сообщение". В обработчике не даю отправлять сообщения пока не придет пустая строка. :) После ввода пустой строки останавливаю поток сообщений и жду ввода. После ввода снова запускаю :)

Всем спасибо!
1. Пишущий поток (несколько потоков) кладет сообщение в очередь, уведомляет (будит) читающий поток
2. Читающий поток извлекает сообщение (сообщения) из очереди (пока она не станет пустой) и выводит в консоль, после чего засыпает
3. Нажимаете <ESC>, читающий поток блокируется (не читает очередь), появляется приглашение ">"
4. Вводите сообщение, нажимаете <Enter>, отправляете сообщение в очередь (по аналогии с пишущим потоком), разблокируйте читающий поток
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Небольшая проблема с консколью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]