Слежение за процессом загрузки
Если вы хотя бы раз видели, как изображение загружается из Internet, то заметили, что оно появляется на экране по частям по мере загрузки. Это происходит в том случае, когда системное свойство awt.image .incrementalDraw имеет значение true.
При поступлении каждой порции изображения браузер вызывает логический метод imageUpdate () интерфейса ImageObserver. Аргументы этого метода содержат информацию о процессе загрузки изображения img. Рассмотрим их:
imageUpdate(Image img, int status, int x, int y, int width, int height);
Аргумент status содержит информацию о загрузке в виде одного целого числа, которое можно сравнить со следующими константами интерфейса ImageObserver:
- WIDTH – ширина уже загруженной части изображения известна, и может быть получена из аргумента width;
- HEIGHT – высота уже загруженной части изображения известна, и может быть получена из аргумента height;'
- PROPERTIES – свойства изображения уже известны, их можно получить методом getProperties() класса Image;
- SOMEBITS – получены пикселы, достаточные для рисования масштабированной версии изображения; аргументы x, y, width, height определены;
- FRAMEBITS – получен следующий кадр изображения, содержащего несколько кадров; аргументы x, y, width, height не определены;
- ALLBITS – все изображение получено, аргументы x, y, width, height не содержат информации;
- ERROR – загрузка прекращена, рисование прервано, определен бит ABORT;
- ABORT – загрузка прервана, рисование приостановлено до прихода следующей порции изображения.
Вы можете переопределить этот метод в своем апплете и использовать его аргументы для слежения за процессом загрузки и определения момента полной загрузки.
Другой способ отследить окончание загрузки – воспользоваться методами класса MediaTracker. Они позволяют проверить, не окончена ли загрузка, или приостановить работу апплета до окончания загрузки. Один экземпляр класса MediaTracker может следить за загрузкой нескольких зарегистрированных в нем изображений.