Java applets

Матеріал з Вікі ЦДУ
Версія від 08:50, 11 жовтня 2013; V kotyak (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

До сих пір ми створювали додатки (applications), працюючі самостійно (standalone) в JVM під управлінням графічної оболонки операційної системи. Ці додатки мали власне вікно верхнього рівня типу Frame, зареєстроване у віконному менеджері (window manager) графічної оболонки. Крім додатків, мова Java дозволяє створювати аплети (applets). Це програми, що працюють в середовищі іншої програми - браузера. Аплету не потрібне вікно верхнього рівня - їм служить вікно браузера. Вони не запускаються JVM — їх завантажує браузер, котрий сам запускає JVM для виконання аплету. Ці особливості відбиваються на написанні програми аплета.

З точки зору мови Java, аплет — це всяке розширення класу Applet, котрий, в свою чергу, розширяє клас Panel. Таким чином, аплет - це панель спеціального виду, контейнер для розміщення компонентів з додатковими властивостями і методами. Менеджером розміщення компонентів по замовчуванню, як і в класі Panel, служить FІowLayout. Класс Applet знаходиться в пакеті java.applet, в якому крім нього єсть тільки три інтерфейси, реалізовані в браузері. Треба відмітити, що не всі браузери реалізують ці інтерфейси повністю.

Оскільки JVM не запускає аплет, відпадає необхідність в методi main(), його немає в аплетах. В аплетах рідко зустрічається конструктор. Справа в тому, що при запуску першого створюється його контекст. Під час виконання конструктора контекст ще не сформований, тому не всі початкові значення вдається визначити в конструкторі. Початкові дії, зазвичай виконувані в конструкторі і методі main(), в аплеті записуються в метод init() класу Applet. Цей метод автоматачно запускається виконуючою системою Java браузера зразу ж післе завантаження аплета. Ось як він виглядає у вихідному коді класу Applet:

public void init(){}

Метод init() не має аргументів, не повертає значення і повинен перевизначатися в кожному аплеті — підкласі класу Applet. Зворотні дії — завершення роботи, звільнення ресурсів — записуються при необхідності в метод destroy(), також виконуваний автоматично при вивантаженні аплету. В класі Applet єсть пуста реалізація цього методу.

Крім методів init() і destroy() в класі Applet присутні ще два пустих методи, виконувані автоматично. Браузер повинен звертатися до методу start() при кожній появі аплету на екрані і звертатися до методу stop(), коли аплет зникаєт з eкрана. В методі stop() можна визначити дії, зупиняючі роботу аплета, в методі start() — відновлюючі її. Треба зразу ж відмітити, що не всі браузери звертаються до цих методів як повинно. Так, перший із розглянутих нижче аплетів HelloWorld.html мені не вдалося запустити браузером Internet Explorer, прийшлося скористатися власним Java браузером appletviewer, як пояснено далі.

Роботу указаних методів можна пояснити простим житійським прикладом. Приїхавши весною на дачу, ви прокладаєте водопровідні труби, прикручуєте крани, протягуєте шланги - виконуєте метод init() для своєї зрошувальної системи. Після цього, приходячи на ділянку, включаєте крани — запускаєте метод start(), а виходячи, виключаєте їх — виконуєте метод stop(). Нарешті, восени ви розбираєте зрошувальну систему, відкручуєте крани, просушуєте і укладуєте водопровідні труби - виконуєте метод destroy().


Найпростіший аплет

Перераховані вище методи init(), start(), stop(), destroy() не є обовязковими при написанні простих аплетів, які не займають багато памяті, як свідчить наступний приклад. В лістинзі 1 записаний простенький аплет, виконуючий вічну програму HelloWorІd.

Лістинг 1. Аплет HelloWorld

import java.awt.*; import java.applet.*; public class HelloWorld extends Applet{ public void paint(Graphics g){ g.drawstring("Hello, XXI century World!", 10, 30); } }

Ця програма записується в файл HelloWorld.java і компілюється зазвичай: javac HelloWorld.java.

Виконання аплета

Компілятор створює файл HelloWorld.class, але скористатися для його виконання інтерпретатором java теперь не можна немає методу main(). Замість інтерпретації треба дать вказівку браузеру для запуску аплета. Всі вказівки браузеру даються помітками, тегами (tags), на мові HTML (HyperText Markup Language). Зокрема, вказівка на запуск аплета даєтсья в тезі <applet>. В ньому обовязково задається імя файла з класом аплета параметром code, ширина width і висота height панелі аплета в пікселях. Повністю текст HTML для нашого аплета приведений в лістинзі 2.

Лістинг 2. Файл HTML для завантаження аплета HelloWorІd

<html> <head><title> Applet</title></head> <body>
<applet code = "HeІІoWorld.class" width = "200" height = "100"> </applet> </body> </html>

Цей текст заноситься в файл з розсширенням html або htm, наприклад HelloWorld.html. Імя файла довільне, ніяк не звязано з аплетом або класом апплета. Обидва файли — HelloWorld.html і HelloWorld.class - поміщаються в один каталог на сервері, і файл HelloWorld.html завантажується в браузер, який може знаходитися в будь-якому місці Internet. Браузер, проглядаючи HTML-файл, виконає тег <appІet> і завантажить аплет. Після завантаження аплет зявиться у вікні браузера.

В цьому простому прикладі можна помітити ще дві особливості аплетів. По-перше, розмір аплета задається не в ньому, а в тезі <applet>. Це дуже зручно, можна змінювати розмір аплета, не компілюючи його заново. Можна організувати аплет невидимим, зробивши його розміром в один піксель. Крім того, розмір аплета дозволяється задати в процентах по відношенню до розміру вікна браузера, наприклад, <applet code = "HelloWorld.class" width = "100%" height = "100%"> .