English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Applet - это Java-программа. Она обычно работает в веб-браузере, поддерживающем Java. Благодаря полному поддержке Java API, Applet является полнофункциональным Java-приложением.
Как показано ниже, между независимым Java-приложением и applet-программой есть важные различия:
Класс Applet в Java наследует класс java.applet.Applet.
Класс Applet не определяет метод main(), поэтому Applet-программа не вызывает метод main().
Applet спроектирован для встраивания в HTML-страницу.
Когда пользователь просматривает HTML-страницу, содержащую Applet, код Applet загружается на машину пользователя.
Чтобы увидеть Applet, требуется JVM. JVM может быть плагином веб-браузера или независимой средой выполнения.
JVM на пользователе создает пример класса Applet и вызывает различные методы жизненного цикла Applet.
Applet имеет строгие правила безопасности, enforced by web браузеры, и его безопасность называется sandboxing.
Другие классы, необходимые для Applet, можно загрузить в виде Java архивов (JAR) файлов.
Четыре метода в классе Applet предоставляют нам骨架, на котором можно разрабатывать小程序:
init: Цель этого метода - предоставить вашему Applet любую необходимую инициализацию. Этот метод вызывается после обработки тегов param в теге Applet.
start: Этот метод автоматически вызывается после вызова метода init. Этот метод вызывается каждый раз, когда пользователь возвращается на страницу, содержащую Applet.
stop: Этот метод автоматически вызывается, когда пользователь удаляет Applet с страницы. Таким образом, этот метод может быть вызван несколько раз в одном и том же Applet.
destroy: Этот метод вызывается только при нормальном закрытии браузера. Поскольку Applet работает только на веб-страницах, вы не должны оставлять какие-либо ресурсы, когда пользователь покидает страницу, содержащую Applet.
paint: Этот метод вызывается сразу после метода start() или когда Applet нужно перерисовать в браузере. Метод paint() фактически наследуется от java.awt.
Вот простая программа Applet HelloWorldApplet.java:
import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet { public void paint(Graphics g) { g.drawString("Hello World", 25, 50); } }
Эти импортные предложения импортируют следующие классы в наш класс Applet:
java.applet.Applet. java.awt.Graphics.
Без этих импортных предложений компилятор Java не сможет распознать классы Applet и Graphics.
Каждый Applet является подклассом java.applet.Applet, базовый класс Applet предоставляет методы, которые могут быть вызваны производными классами, чтобы получить информацию о контексте браузера и услуги.
Эти методы выполняют следующие действия:
Получение параметров Applet
Получение сетевого местоположения HTML файла, содержащего Applet
Получение сетевого местоположения каталога класса Applet
Печать состояния браузера
Получение изображения
Получение аудиофрагмента
Воспроизведение аудиофрагмента
Изменение размера этого Applet
Кроме того, класс Applet предоставляет интерфейс, который позволяет Viewer или браузеру получить информацию о Applet и контролировать его выполнение.
Vieweer может быть:
Информация о авторе, версии и правах на Applet
Описание параметров, которые могут быть идентифицированы Applet
Инициализация Applet
Уничтожение Applet
Начало выполнения Applet
Окончание выполнения Applet
Класс Applet предоставляет mặc định реализацию этих методов, которые можно переопределить по мере необходимости.
Applet "Hello, World" написаны по стандарту. Единственным измененным методом является метод paint.
Applet - это Java программа. Обычно она запускается в веб-браузере, поддерживающем Java. Благодаря полному поддержке Java API, Applet является полнофункциональным Java приложением.
<applet> тег в HTML файле используется для встраивания Applet. Вот пример вызова applet "Hello World":
<html> <title>The Hello, World Applet</title> <hr> <applet code="HelloWorldApplet.class" width="320" height="120"> If your browser was Java-enabled, a "Hello, World" message would appear here. </applet> <hr> </html>
Внимание: Вы можете ознакомиться с методами вызова applet из HTML, используя HTML тег Applet.
<applet> атрибуты определяют класс Applet, который нужно запустить. Атрибуты width и height используются для определения начального размера панели выполнения Applet. Applet должен быть закрыт с помощью тега </applet>.
Если Applet принимает параметры, то значения параметров необходимо добавить в тег <param>, который находится между тегами <applet> и </applet>. Браузер пропускает текст и другие теги между тегами applet.
Браузеры, не поддерживающие Java, не могут выполнять теги <applet> и </applet>. Поэтому все, что находится между этими тегами и не связано с applet, будет видимым в браузерах, не поддерживающих Java.
Viewer или браузер ищет скомпилированный Java-код в положении документа, чтобы указать путь к документу, нужно использовать свойство codebase тега <applet>.
Как показано ниже:
<applet codebase="http://amrood.com/applets" code="HelloWorldApplet.class" width="320" height="120">
Если Applet находится в пакете, а не в стандартном пакете, то пакет должен быть указан в свойстве code, например:
<applet code="mypackage.subpackage.TestApplet.class" width="320" height="120">
Ниже приведен пример того, как использовать Applet для ответа на заданные параметры файла. Этот Applet показывает черно-белый шахматный узор и второй цвет.
Второй цвет и размер каждого столбца определяются параметрами Applet в документе.
CheckerApplet получает свои параметры в методе init(). Также его параметры можно получить в методе paint(). Однако, удобнее и эффективнее, если Applet начинает получать значения и сохранять настройки, а не каждый раз при обновлении.
Applet viewer или браузер вызывают метод init() при каждом запуске Applet. После загрузки Applet Viewer немедленно вызывает метод init() (Applet.init() ничего не делает), перезаписывая стандартное выполнение метода и добавляя некоторые пользовательские инициализационные коды.
Метод Applet.getParameter() через предоставление имени параметра получает значение параметра. Если полученное значение является числом или другим 非-строковым данными, то его необходимо интерпретировать как строковый тип.
Ниже приведен пример изменения CheckerApplet.java:
import java.applet.*; import java.awt.*; public class CheckerApplet extends Applet { int squareSize = 50; // Инициализировать значение по умолчанию public void init() {} private void parseSquareSize(String param) {} private Color parseColor(String param) {} public void paint(Graphics g) {} }
Ниже приведены методы init() класса CheckerApplet и частный метод parseSquareSize():
public void init() { String squareSizeParam = getParameter("squareSize"); parseSquareSize(squareSizeParam); String colorParam = getParameter("color"); Color fg = parseColor(colorParam); setBackground(Color.black); setForeground(fg); } private void parseSquareSize(String param) { if (param == null) return; try { squareSize = Integer.parseInt(param); } catch (Exception e) { // Сохранить значение по умолчанию } }
Этот Applet использует метод parseSquareSize() для преобразования параметра squareSize. Метод parseSquareSize() вызывается библиотечным методом Integer.parseInt(), который преобразует строку в целое число, и throws исключение, когда параметр недопустим.
Таким образом, метод parseSquareSize() также перехватывает исключения и не позволяет Applet принимать недопустимые входные данные.
Applet использует метод parseColor() для преобразования параметра цвета в значение Color. Метод parseColor() выполняет серию сравнений строк для совпадения значения параметра с именем предопределенного цвета. Вам нужно реализовать эти методы для работы Applet.
Следующий пример - это HTML-файл, в котором встроен класс CheckerApplet. HTML-файл определяет два параметра для applet с помощью тега <param>.
<html> <title>Checkerboard Applet</title> <hr> <applet code="CheckerApplet.class" width="480" height="320"> <param name="color" value="blue"> <param name="squaresize" value="30"> </applet> <hr> </html>
Внимание: Имена параметров не чувствительны к регистру.
Преобразование визуального Java приложения (это означает, что приложение использует AWT и запускается с помощью java launcher) в applet, встроенный в веб-страницу, очень просто.
Вот несколько шагов по преобразованию приложения в Applet:
Напишите HTML-страницу, которая содержит теги для загрузки кода applet.
Напишите подкласс JApplet и установите его как public. В противном случае Applet не может быть загружен.
Удалите метод main() приложения. Не создавайте окно приложения для приложения, так как ваше приложение будет отображаться в браузере.
Перенесите инициализационный код из метода конструктора окна приложения в метод init() Applet. Вы не должны явно конструировать объект Applet, браузер создаст объект, вызывая метод init().
Удалите вызов метода setSize(), для Applet размер уже определен параметрами width и height в html-файле.
Удалите вызов метода setDefaultCloseOperation(). Applet не может быть закрыт, он завершается вместе с выходом браузера.
Если приложение вызывало метод setTitle(), удалите вызов этого метода. Applet не может иметь строку заголовка. (Конечно, вы можете дать имя веб-странице через тег title в html)
Не вызывайте setVisible(true), Applet автоматически отображается.
The Applet class inherits many event handling methods from the Container class. The Container class defines several methods, such as processKeyEvent() and processMouseEvent(), which are used to handle specific types of events, and there is also a method called processEvent to capture all events.
To respond to an event, the Applet must override the appropriate event handling method.
import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.applet.Applet; import java.awt.Graphics; public class ExampleEventHandling extends Applet implements MouseListener { StringBuffer strBuffer; public void init() { addMouseListener(this); strBuffer = new StringBuffer(); addItem("initializing the applet "); } public void start() { addItem("starting the applet "); } public void stop() { addItem("stopping the applet "); } public void destroy() { addItem("unloading the applet"); } void addItem(String word) { System.out.println(word); strBuffer.append(word); repaint(); } public void paint(Graphics g) { //Draw a Rectangle around the applet's display area. g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); //display the string inside the rectangle. g.drawString(strBuffer.toString(), 10, 20);}} } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { addItem("mouse clicked! "); } }
Следующий вызов Applet:
<html> <title>Обработка событий</title> <hr> <applet code="ExampleEventHandling.class" width="300" height="300"> </applet> <hr> </html>
При первом запуске Applet отображает "initializing the applet. Starting the applet." и после нажатия на прямоугольник отображает "mouse clicked".
Applet может отображать изображения в формате GIF, JPEG, BMP и другие. Для отображения изображения в Applet необходимо использовать метод drawImage() класса java.awt.Graphics.
Ниже приведен пример всех шагов отображения изображения:
import java.applet.*; import java.awt.*; import java.net.*; public class ImageDemo extends Applet { private Image image; private AppletContext context; public void init() { context = this.getAppletContext(); String imageURL = this.getParameter("image"); if(imageURL == null) { imageURL = "java.jpg"; } try { URL url = new URL(this.getDocumentBase(), imageURL); image = context.getImage(url); }catch(MalformedURLException e) { e.printStackTrace(); // Отображение в строке состояния браузера context.showStatus("Не удалось загрузить изображение!"); } } public void paint(Graphics g) { context.showStatus("Displaying image"); g.drawImage(image, 0, 0, 200, 84, null); g.drawString("www.javalicense.com", 35, 100); } }
Следующий вызов этого applet:
<html> <title>The ImageDemo applet</title> <hr> <applet code="ImageDemo.class" width="300" height="200"> <param name="image" value="java.jpg"> </applet> <hr> </html>
Applet может воспроизводить аудио, используя интерфейс AudioClip из пакета java.applet. Интерфейс AudioClip определяет три метода:
public void play(): Воспроизведение аудиофрагмента с начала один раз.
public void loop(): Воспроизведение аудиофрагмента в цикле
public void stop(): Остановить воспроизведение аудиофрагмента
Чтобы получить объект AudioClip, вам нужно вызвать метод getAudioClip() класса Applet. Метод немедленно вернет результат, независимо от того,指向 ли URL реальный аудиофайл.
Файл аудио загружается только тогда, когда он должен быть воспроизведен.
Данный пример демонстрирует все шаги для воспроизведения аудио:
import java.applet.*; import java.awt.*; import java.net.*; public class AudioDemo extends Applet { private AudioClip clip; private AppletContext context; public void init() { context = this.getAppletContext(); String audioURL = this.getParameter("audio"); if(audioURL == null) { audioURL = "default.au"; } try { URL url = new URL(this.getDocumentBase(), audioURL); clip = context.getAudioClip(url); }catch(MalformedURLException e) { e.printStackTrace(); context.showStatus("Could not load audio file!"); } } public void start() { if(clip != null) { clip.loop(); } } public void stop() { if(clip != null) { clip.stop(); } } }
Такой вызов applet:
<html> <title>The ImageDemo applet</title> <hr> <applet code="ImageDemo.class" width="0" height="0"> <param name="audio" value="test.wav"> </applet> <hr>
Вы можете использовать test.wav с вашего компьютера для тестирования примеров выше.