Если вы хотя бы раз видели, как изображение загружается из 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 может следить за загрузкой нескольких зарегистрированных в нем изображений.