Многие из ранних разработчиков Java находили интерфейс ImageObserver слишком сложным для понимания и управления загрузкой множественных изображений. Сообщество разработчиков просило более простое решение, которое позволило бы программистам загружать все их изображения синхронно, не беспокоясь относительно imageUpdate(). В ответ на это Sun Microsystems в последующем выпуске JDK добавила к java.awt класс с именем MediaTracker. MediaTracker создает объект, который будет параллельно проверять состояние произвольного числа изображений.
Для использования MediaTracker вы создаете его новый экземпляр и применяете его метод addImage(), чтобы прослеживать состояние загрузки изображения. Общий формат addimage():
void addImage (Image imgObj, int imgID)
void addImage(Image imgObj, int imgID, int width, int height)
Здесь imgObj — прослеживаемое изображение. Его идентификационный номер передается в imgID. ID (идентификатор) номера не должны быть уникальными. Вы можете использовать тот же номер с несколькими изображениями, как средство их идентификации в качестве части группы. Во второй форме параметры width и height определяют размеры отображаемого объекта.
Как только вы зарегистрировали изображение, можете проверить, загружено ли оно, или можете ждать, когда оно полностью загрузится. Для проверки состояния изображения вызывают метод checkID(), одна из версий, которого, имеет формат:
boolean checkID(int imgID)
Здесь imgID определяет ID изображения, которое вы хотите проверить. Метод возвращает true, если все изображения, которые имеют указанный идентификатор, были загружены (или, когда загрузка закончилась с ошибкой или пользователь выполнил аварийное завершение работы). Иначе он возвращает false. Чтобы увидеть, были ли все прослеживаемые изображения загружены, можно использовать метод checkAll().
MediaTracker следует применять при загрузке группы изображений. Пока все изображения не разгружены, вы можете развлечь пользователя, отобразив на экране что-нибудь еще (пока прибывают загружаемые изображения).
Далее следует пример, который загружает слайд-показ с семью изображениями и отображает прогресс-полоску процесса загрузки:
value = "vincent+leonardo+matisse+picasso+renoir+seurat+vermeer">
</applet>
В папке с class - файлом должны быть файлы с картинками, имене которых указаны в html-файле: vincent.jpg, leonardo.jpg, matisse.jpg, picasso.jpg, renoir.jpg, seurat.jpg, vermeer.jpg.
Представленный пример создает новый MediaTracker в методе init() и затем добавляет каждое из именованных прослеживаемых изображений с помощью метода addImage(). В методе paint() на очередном из прослеживаемых изображений вызывается checkID(). Если все изображения загружены, они отображаются. Если нет, показывается простая прогресс-полоска числа загруженных изображений с именами полностью загруженных (отображаемых ниже этой полоски). На рис.4 показано окно апплета с одним из портретов.