Аплети у порівнянні з додатками
Аплети – це невеличкі програми, що працюють в середині браузера.
Прикметник “невеличкі” відображує типову практику використання аплетів, а не формальні вимоги. Теоретично аплети можуть бути великими та складними. Але обсяг аплета впливає на час його запуску, оскільки код аплета звичайно передається по мережі Internet. Відповідно великий аплет потребує багато часу на завантаження.
Теоретично найбільш популярні браузери підтримують роботу аплетів. Але тут виникають певні проблеми. В середовищі Windows XP за допомогою Internet Explorer запустити аплет не вдається. Причина – відсутність віртуальної Java-машини, яка б дозволила виконати аплет. Шляхи подолання цієї проблеми – скачування та подальше використання віртуальної Java-машини, або використання іншого браузера, або використання програми appletviewer.exe, що входить до складу SDK, для відлагодження аплета з наступним запуском його під Windows 98/2000.
Проблема безпеки
Суть проблеми в тому, що аплет – це програма, яку користувач отримує з зовнішнього джерела. Відповідно вона є потенційно небезпечною. Тому аплети сильно обмежені в своїх правах. Наприклад, аплети не можуть читати локальні файли (тобто файли на клієнтській машині), а тим більше в них писати. Є також обмеження на передачу даних через мережу: аплет може обмінюватись даними тільки з тим сервером Web, з якого його завантажено.
Включення аплетів в HTML-документ
Створення аплетів
Для побудови аплета треба створити клас-нащадок класа Applet, який входить до складу пакета java.applet, та перевизначити в ньому низку методів класа Applet. З деякими з них ми з вами вже познайомились при створенні програм-додатків. Справа в тому, що клас Applet, як і клас Frame, є непрямим нащадком класу Component, відповідно вони мають багато спільних методів. Зокрема, як і при створенні додатків, часто необхідно перекривати метод paint().
Але в класі Applet є свої специфічні методи, яких не було у класі Frame та якими ми не користувались. В класі Applet вони визначені як порожні заглушки; ми можемо їх спокійно перевизначати, нічого при цьому не втрачаючи. Тож розглянемо їх.
public void init()
Викликається браузером один раз одразу після завантаження аплета перед першим викликом метода start(). Цей метод треба перевизначати практично завжди, якщо в аплеті потрібна будь-яка ініціалізація. Мабуть, ми не помилимося, якщо весь код, який знаходився у програмі-додатку в конструкторі перенесемо в метод init() аплета.
Як і конструктор, init() має свою контрпару:
public void destroy()
Викликається браузером один раз перед вивантаженням даної сторінки. Якщо аплет використовував ресурси, які перед знищенням аплета треба звільнити, це необхідно зробити, перевизначивши цей метод.
public void start()
Викликається браузером при кожному “відвідуванні” даної сторінки. Тобто можна завантажити дану сторінку, потім завантажити іншу, не закриваючи дану, а потім повернутися до даної. І кожен раз буде викликатися метод start() (на відміну від init(), який викликається лише один раз). Контрпара start() – метод
public void stop()
Викликається браузером при деактивації даної сторінки як у випадку завантаження нової сторінки без вивантаження даної, так і у випадку вивантаження даної. В останньому випадку stop() викликається перед destroy().
Методи start() і stop() використовуються в парі для заощадження ресурсів, наприклад, при створенні анімації. Тоді stop() може її зупинити, а start() запустити знову.
Зверніть увагу. Жоден з цих методів не викликається програмістом напряму, всі вони викликаються браузером.
Перетворення додатка на аплет (на прикладі програми NervousText.java) можна такими діями:
1) Додати рядок
import java.applet.Applet;
2) В заголовку класу замінити extends Frame на extends Applet.
3) Конструктор public NervousText() замінити на public void init().
4) Знищити (закоментувати) виклик конструктора суперкласа super(“Nervo”).
5) Знищити (закоментувати) метод main() повністю.
6) Якщо його не було визначено, створити метод stop(), в якому зупинити роботу потоку kill: kill.stop().
Наприкінці наведемо приклад простого html-файла, який дозволить запустити на виконання створений аплет.
<title> Nervo </title>
<hr>
<applet code=NervoText.class width=250 height=100>
</applet>
<hr>
Даний текст, записаний в будь-якому текстовому редакторі, необхідно занести в файл з довільним ім’ям і розширенням .html, а потім запустити на виконання в якомусь браузері, наприклад, в середовищі Internet Explorer. Але попередньо необхідно створити клас аплета NervousText.class, як і завжди, за допомогою компілятора javac.exe.
32. Перетворення аплетів на додатки.
33. Конфігурування аплетів
34. Використання класу MediaTracker.
MediaTracker являє собою об'єкт, який паралельно перевіряє стан виведення будь-якої кількості зображень. В майбутніх версіях він буде відслідковувати висновок інформації інших типів (наприклад, відтворення аудіофайлів), проте в даний час він відстежує лише зображення.
Для роботи з MediaTracker необхідно створити новий екземпляр, а потім використовувати його метод addImage () для відстеження процесу завантаження зображення, має дві форми:
void addlmage (Image об'єкт, int дескриптор)
void addlmage (Image об'єкт, int дескриптор, int ширина, int висота)
Тут об'єкт - відслідковувати зображення. Його ідентифікаційний номер передається за допомогою параметра дескриптор. Дескриптор необов'язково повинен бути унікальним. Один і той же дескриптор можна використовувати для декількох зображень, і таким чином ідентифікувати їх як частину однієї групи. У другій формі методу параметри ширина і висота задають розміри об'єкта на екрані.
Зареєструвавши зображення, можна перевірити, завантажено його або перебуває в процесі завантаження. Щоб перевірити стан процесу завантаження зображення, викличте метод checkID ().
boolean checkID (int дескриптор)
Тут дескриптор задає ідентифікаційний номер перевіряється зображення. Якщо всі зображення з даними дескриптором вже завантажені (або якщо в процесі завантаження сталася помилка або завантаження була перервана користувачем), то метод повертає значення true. В іншому випадку повертається значення false. Для перевірки стану всіх завантажуваних зображень можна використовувати метод checkAl ().
Клас MediaTracker можна використовувати при завантаженні групи зображень. Якщо завантажені не всі цікавлять вас зображення, на екран можна виводити небудь інше, щоб розважити користувача до закінчення процесу завантаження.