![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| AndryG |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 10.9.2009 Репутация: нет Всего: нет |
Доброго.
Нужно в цикле постоянно вызывать perform(), если есть в потоке данные - обработать их. При использовании Scanner, выполнение останавливается, пока не ввести данные в поток. Если использовать InputStreamReader, то задержки нет, но в консоли не отображаются вводимые данные. Появляются только при нажатии Enter. Подскажите, пжлст, как ? РЕШЕНИЕ
Реализация от LSD http://forum.vingrad.ru/index.php?showtopi...t&p=2126941 Это сообщение отредактировал(а) AndryG - 31.3.2010, 17:10 |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А нижележащий поток доступен?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| AndryG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 10.9.2009 Репутация: нет Всего: нет |
Нижележащий - консоль (сейчас).
Моему классу нужен поток ввода. Я хочу научить его работать как с консоли( сейчас классу дается такой поток new InputStreamReader(System.in, "WINDOWS-1251") так и с GUI - из строки ввода. Вот и надо найти наименьший общий делитель для этих двух вариантов источников данных. (дальше предполагается и работа через сокеты) |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
не блокируется, но не совсем понятно когда там будет полная строка. Может стоит сделать 2 потока? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 5 Всего: 38 |
А смотри вот на такую реализацию. Которая пока работает и не дает сбоев:
Размер буфера выбран достаточно большим, так как сообщения не большие гоняются. Закометированый метод реально не работает. Так как сразу читает а что там есть и получает "-1", т.е. ничего нет. А так сторона еще и не пыталась писать в поток. Вот и пришлось сидеть на read, пока в потоке не появится сообщение. Это сообщение отредактировал(а) MisterCleric - 30.3.2010, 17:38 -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| AndryG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 10.9.2009 Репутация: нет Всего: нет |
LSD, Вы имеете ввиду "нити" ... потеряюсь я в них, пока
Если посадить обработку ввода в отдельный поток (нить), то по обработке будет выводится куча инфы + изменения в кучке объектов ... и тут же команды с консоли. Я понимаю, что корректная синхронизация всё решит ... но это многовато для первой задачки на java А может создать класс, который в отдельной нити будет читать поток ввода и в представлять его в виде очереди строк для основного потока? MisterCleric, "Вот и пришлось сидеть на read, пока в потоке не появится сообщение." мне как-раз и не подходит - мне надо постоянно крутить perform() ... и, мимоходом, обрабатывать консольный ввод. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Хороший вариант, заодно он может его и парсить например (если нужно). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| AndryG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 10.9.2009 Репутация: нет Всего: нет |
Меня прет
Мой "Планировщик заданий" выкинул первое уведомление
Это сообщение отредактировал(а) AndryG - 30.3.2010, 20:26 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не надо никакой синхронизации, достаточно использовать синхронизированную очередь.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| AndryG |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 10.9.2009 Репутация: нет Всего: нет |
Для будущих читателей.
Пост выше - это реализация идеи "читать поток в отдельной нити и через очередь выдавать данные основной нити." |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |