![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| cromm3 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
Всем привет!
Есть следующая функция:
Как можно прервать запрос данных (is1 = urlConn.getInputStream();)? Что бы пользователь мог, скажем, по нажатию кнопки остановить процесс? Спасибо! |
|||
|
||||
| JUncle |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 6.4.2006 Где: Казань, РФ Репутация: нет Всего: 1 |
cromm3, по видимому как и с сокетами, закрыть поток методом close, и перехватить IOException (возможно, используя какой либо признак, чтобы не записывать сообщение об ошибке в лог либо не выводить на экран).
--------------------
class JUncle extends Man // singleton{/*...*/} |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Очевидно, вы хотите прервать операцию c = is1.read(). Читающий процесс блокируется в read(), если нет данных. В общем случае - НИКАК!
Можно попробовать is1.close() другим потоком. Но этот другой поток также может оказаться заблокированным - войдет в close() , да так там в недрах и останется в состоянии lock. Здесь вам не сокеты Interrupt на читающем потоке тоже ничего недаст (впрочем как и запрещенный stop). Разблокировать можно с сервера послав данные или закрыв соединение. Но это не выход. А выход - оставить как есть - обьявить читающий поток мертвым через какой-либо флаг и начать все сначала, если надо. Заблокированный же поток будет висеть, пока не сработает таймаут сокета (если предусмотрен) или виртуальная машина не будет остановлена или что-то с сервера не придет. Это сообщение отредактировал(а) COVD - 18.10.2006, 23:58 |
|||
|
||||
| cromm3 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
Пробовал is1.close() но это не останавливает поток, что мне показалось удивительным...
|
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
В смысле, поток не блокируется в close()? Ну, а цель-то достигается? Читающий поток разблокируется?
|
|||
|
||||
| cromm3 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
Нет, цель не достигается, даже если сделать is1.close() в каком-то другом потоке, то функция все равно ждет когда исполнится urlConn.getInputStream() и потом продолжает работать дальше, причем корректно получив все данные с сервера…
|
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
ну так я вам про то и говорил, что при использовании сановского URLConnection никак не разблокировать. Посмотрите апачевский HttpClient http://jakarta.apache.org/commons/httpclient/.
|
|||
|
||||
| cromm3 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 86 Регистрация: 22.3.2006 Репутация: нет Всего: нет |
В общем, проблему решил сменой всего алгоритма работы с запросами… но все равно спасибо!
|
|||
|
||||
![]()
|
| Правила форума "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. |