Класс MediaTracker
Сначала конструктором MediaTracker (Component comp) создается объект класса для указанного аргументом компонента. Аргумент конструктора чаще всего this.
Затем методом addlmagef Image img, int id) регистрируется Изображение img под порядковым номером id. Несколько изображений можно зарегистрировать под одним номером.
После ЭТОГО логическими методами checkID(int id), checkID(int id, boolean load) и checkAii () проверяется, загружено ли изображение с порядковым номером id или все зарегистрированные изображения. Методы возвращают true, если изображение уже загружено, false — в противном случае. Если аргумент load равен true, то производится загрузка всех еще не загруженных изображений.
Методы statusID(int id), statusID(int id, boolean load) и statusALL возвращают целое число, которое можно сравнить со статическими константами COMPLETE, ABORTED, ERRORED.
Наконец, методы waitForID(int id) и waitForAll() ожидают окончания загрузки изображения.
В следующей главе в листинге 15.5 мы применим эти методы для ожидания загрузки изображения.
Изображение, находящееся в объекте класса image можно создать непосредственно по пикселам, а можно получить из графического файла, типа GIF или JPEG, одним из двух методов класса Applet:
Аналогично, звуковой файл в апплетах Представляется в виде объекта, реализующего интерфейс Audiociip, и может быть получен из файла типа AU, AIFF, WAVE или MIDI одним из трех методов класса Applet с такими же аргументами:
getAudioClip(URL address)
getAudioClip(URL address, String fileName)
newAudioClip(URL address)
Последний метод статический, его можно использовать не только в апплетах, но и в приложениях.
Интерфейс Audioclip из пакета java. applet очень прост. В нем всего три метода без аргументов. Метод play () проигрывает мелодию один раз. Метод loop () бесконечно повторяет мелодию. Метод stop о прекращает проигрывание.
Этот интерфейс реализуется браузером. Конечно, перед проигрыванием звуковых файлов браузер должен быть связан со звуковой системой компьютера.
В листинге 14.9 приведен простой пример загрузки изображения и звука из файлов, находящихся в том же каталоге, что и HTML-файл. На рис. 14.5 показано, как выглядит изображение, увеличенное в два раза.
Листинг 14.9, Звук и изображение в апплете
import java.applet.*;
import j ava.awt.*;
import java.awt.image.*;
public class SimpleAudioImage extends Applet{
private Image img;
private Audioclip ac;
public void init(){
img = getImage(getDocumentBase(), "javalogo52x88.gif");
ac = getAudioClip(getDocumentBase(), "yesterday.au"); }
public void start (){ ac.loop();
}
public void paint(Graphics g){
int w = img.getWidthfthis), h = img.getHeight(this);
g.drawlmage(img, 0, 0, 2 * w, 2 * h, this); }
public void stop() { ac.stop(); }
}
Рис. 14.5. Вывод изображения
Перед выводом на экран изображение можно преобразовать, но об этом поговорим в следующей главе.
Как видите, апплету в браузере позволено очень немного. Это не случайно. Апплет, появившийся в браузере откуда-то из Internet, может натворить много бед. Он может быть вызван из файла с увлекательным текстом, невидимо обыскать файловую систему и похитить секретные сведения, или, напротив, открыть окно, неотличимое от окна, в которое вы вводите пароль, и перехватить его.
Поэтому браузер сообщает при загрузке апплета: "Applet started", а в строке состояния окна, открытого апплетом, появляется надпись: "Warning: Applet Window".
Но это не единственная защита от апплета. Рассмотрим данную проблему подробнее.