|
|
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть небольшая проблема с консолью. Мне нужно сделать "интерфейс" к консольному чату. Я сделал небольшую эмуляцию работы чата, т.е. я раз в секунду в отдельном потоке вывожу сообщение в консоль. Проблема в том, что хоть я и могу в это время писать и отправлять корректные сообщения в консоли, новые сообщения из потока "забивают" мой ввод и выходит что-то вроде: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2016, 18:20 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
Единственное что еще есть в JSE "из коробки" это вот http://docs.oracle.com/javase/7/docs/api/java/io/Console.html Не так уж и много. Поэтому я бы обратил внимание на что нибудь вот такое: https://github.com/mabe02/lanterna ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2016, 18:29 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Спасибо за ответ. Поправьте если ошибаюсь, но мне показалось, что http://docs.oracle.com/javase/7/docs/api/java/io/Console.html делает все то же самое, но с использованием других методов. Как я понял, что получаем консоль ассоциированную с текущей JVM (ту ли консоль, которая в IntelliJ IDEA) и можем делать с ней то же самое. https://github.com/mabe02/lanterna - хороший вариант для чата. Похоже, это и нужно использовать. Хотя у меня в задании написано, что нужно сделать серверный чат, а GUI делать не нужно. Вот и озадачился с обычной консолью. Lanterna, похоже, это уже как раз GUI. Получается, что в стандартной консоли можно сделать только кривой чат :) (Обновлять входящие только после ввода пользователя) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2016, 21:26 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
kir86975, Можно сделать с помощью команд, например list<enter> - выводит последние сообщения из чата, а post message <enter> - шлет и т.д. Что-бы сделать более продвинутый вариант придется использовать ncurses, там можно зафигачить прямо окошко, куда пишутся сообщения, затирая предыдущие, и одновременно вводить текст. https://sourceforge.net/projects/javacurses/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2016, 13:36 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
kir86975Хотя у меня в задании написано, что нужно сделать серверный чат, а GUI делать не нужно. Ну, тогда и не тратьте время. Сделайте самый простой вариаинт. Ваш код скорее всего запускать не будут. Просто прочитают, особенно серверную часть. А вы так напираете на клиента. Хотя JFrame+BorderLayout+JTextField x2 это работы на 10 минут. Для вас, возможно, на 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2016, 16:22 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
no56892, https://sourceforge.net/projects/javacurses/ по смыслу очень похоже на https://github.com/mabe02/lanterna. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2016, 20:23 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Я решил проблему просьбой "Ведите Enter чтобы написать сообщение". В обработчике не даю отправлять сообщения пока не придет пустая строка. :) После ввода пустой строки останавливаю поток сообщений и жду ввода. После ввода снова запускаю :) Всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2016, 20:26 |
|
||
|
Небольшая проблема с консколью
|
|||
|---|---|---|---|
|
#18+
kir86975Blazkowicz, Я решил проблему просьбой "Ведите Enter чтобы написать сообщение". В обработчике не даю отправлять сообщения пока не придет пустая строка. :) После ввода пустой строки останавливаю поток сообщений и жду ввода. После ввода снова запускаю :) Всем спасибо! 1. Пишущий поток (несколько потоков) кладет сообщение в очередь, уведомляет (будит) читающий поток 2. Читающий поток извлекает сообщение (сообщения) из очереди (пока она не станет пустой) и выводит в консоль, после чего засыпает 3. Нажимаете <ESC>, читающий поток блокируется (не читает очередь), появляется приглашение ">" 4. Вводите сообщение, нажимаете <Enter>, отправляете сообщение в очередь (по аналогии с пишущим потоком), разблокируйте читающий поток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2016, 21:23 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2123672]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
12ms |
get first new msg: |
7ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 206ms |
| total: | 398ms |

| 0 / 0 |
