| |
аны с обработкой
ошибок:
public boolean isErrorAny();
public boolean isErrorID(int id);
public Object[] getErrorsAny();
public Object[] getErrorsID(int id);
Методы isErrorAny и isErrorID позволяют проверить, возникла ли ошибка при
загрузке, соответственно, любого из отслеживаемых изображений или изображений
из заданной группы. Если ошибка произошла, возвращается значение true, если нет
- значение false.
Методы getErrorsAny и getErrorsID возвращают массив объектов, при ожидании
загрузки которых произошла ошибка. Первый из этих методов возвращает массив для
всех отслеживаемых объектов, второй - только объектов из заданной группы.
Применение интерфейса ImageObserver
Второй способ ожидания завершения процесса загрузки изображений связан с
интерфейсом ImageObserver. Определение этого интерфейса не занимает много места,
поэтому мы приведем его полностью:
public interface java.awt.image.ImageObserver
{
// -------------------------------------------------------
// Биты флагов для параметра infoflags метода imageUpdate
// -------------------------------------------------------
public final static int ABORT;
public final static int ALLBITS;
public final static int ERROR;
public final static int FRAMEBITS;
public final static int HEIGHT;
public final static int PROPERTIES;
public final static int SOMEBITS;
public final static int WIDTH;
// -------------------------------------------------------
// Метод imageUpdate
// -------------------------------------------------------
public abstract boolean
imageUpdate(Image img, int infoflags, int x, int y,
int width, int height);
}
Как видите, в интерфейсе ImageObserver определен единственный метод
imageUpdate и набор битовых флагов для этого метода.
Класс Component, от которого происходит класс Applet, реализует интерфейс
ImageObserver:
public abstract class java.awt.Component
extends java.lang.Object
implements java.awt.image.ImageObserver
{
. . .
}
Этот интерфейс используется для отслеживания процесса загрузки и перерисовки
изображений и других компонент, расположенных внутри компонента. В частности,
он используется для отслеживания загрузки и рисования растровых изображений в
окне аплета, чем мы и воспользуемся.
В процессе загрузки вызывается метод imageUpdate, поэтому чтобы отслеживать
загрузку изображений, наш аплет должен переопределить этот метод.
Процедура ожидания загрузки изображений достаточно проста.
Прежде всего, аплет должен передать в последнем параметре методу drawImage
ссылку на интерфейс ImageObserver, который будет применяться для отслеживания
процесса загрузки:
g.drawImage(Img, x, y, width, height, this);
Здесь в качестве ссылки на интерфейс ImageObserver мы передали значение this.
При этом будет применен интерфейс нашего аплета. Соответственно, нам нужно
определить в классе аплета метод imageUpdate, который будет вызываться в
процессе загрузки изображений.
Ниже мы привели возможный вариант реализации этого метода, который позже
будет описан в деталях:
public boolean imageUpdate(Image img, int flags,
int x, int y, int w, int h)
{
// Проверяем, все ли биты изображения загружены
fAllLoaded = ((flags & ALLBITS) != 0);
// Если все, перерисовываем окно
if(fAllLoaded)
repaint();
// Если все биты загружены, дальнейшие вызовы
// метода imageUpdate не нужны
return !fAllLoaded;
}
Через первый параметр img методу imageUpdate передается ссылка на
изображение, загрузка которого отслеживается.
Параметр flags отражает состояние процесса загрузки.
Через остальные параметры x, y, w и h передаются, соответственно, координаты
и размеры изображения.
Основное, что должен делать метод imageUpdate для отслеживания процесса
загрузки - это проверять флаги fl
|
|