2012-04-13 3 views
1

Я создаю панель, которая показывает большое изображение. Я использую метод ImageIO.read(URL), чтобы показать изображение. Теперь я должен добавить функциональность, чтобы сломать или приостановить процесс чтения данного URL изображения.Как сломать/приостановить чтение изображения?

Как я могу это сделать?

BufferedImage image = null; 
URL urlImage = new URL(surl); 
image = ImageIO.read(urlImage); 
+1

* «добавить функциональность, чтобы сломать или приостановить чтение» * «ImageIO.read()» - это метод блокировки, поэтому мне не нравятся ваши шансы. OTOH это кажется странным требованием. Какую функцию вы пытаетесь реализовать, делая это? У меня есть возможные ответы, сосредоточенные вокруг 'InputStream' или' MediaTracker', но чтобы сузить его, попробуйте заполнить прецедент или функцию этой функции. –

+0

Я хочу создать облачное приложение, где мой файл изображения находится в облаке, и это большой размер, такой как 10-20mb, и как только я начал читать этот файл, я не могу остановить это, и я не хочу ждать загрузка полного файла. –

ответ

0

Вам обязательно понадобится другой поток, из которого вы можете закрыть InputStream, который читает ImageIO.read. Таким образом, в первую очередь, вам необходимо перепроектировать код:

final InputStream stream = new URL(surl).openStream(); 
// find a way to push the 'stream' reference to the other thread 
final BufferedImage image = ImageIO.read(stream); // this will block 

В другом потоке, вам придется позвонить stream.close().

+0

Спасибо, я попробую. –

1

Невозможно сделать это из коробки. То, что вы можете сделать, это положить в отдельный поток и остановить или прервать его.

Просто имейте в виду, Thread.stop() отмечен как устаревший по уважительной причине и подумает о том, что может произойти утечка памяти. Btw. почему вам нужно добавить такую ​​функциональность?

+0

Я полагаю, что OP хочет, чтобы конечный пользователь мог остановить или отменить загрузку. –

+0

@MarkoTopolnik Тогда это было бы решением, я думаю. – dwalldorf

+1

вызов Thread.stop() никогда не является решением, особенно если он выполняет операции ввода-вывода. –

Смежные вопросы