Java-апплеты: основы, жизненный цикл и ключевые отличия от приложений
Что такое апплет?
Апплет (Applet) — это Java-программа, предназначенная для запуска в веб-браузере. В отличие от обычных приложений, апплеты не имеют метода main() и управляются браузером через специальный жизненный цикл.
Важно: Технология апплетов устарела (deprecated) начиная с Java 9 и полностью удалена в Java 17+. Современные браузеры больше не поддерживают NPAPI-плагины, необходимые для запуска апплетов. Эта информация приведена в образовательных целях и для поддержки legacy-систем.
Ключевые отличия апплетов от обычных приложений
| Характеристика | Апплет | Обычное приложение |
|---|---|---|
| Базовый класс | Наследует java.applet.Applet (или JApplet для Swing) | Любой класс с main() |
| Точка входа | Нет main(); управляется браузером | Метод public static void main(String[]) |
| Размещение | Встраивается в HTML-страницу (<applet> или <object>) | Запускается из командной строки |
| Загрузка | Код загружается по сети на машину пользователя | Запускается локально |
| Безопасность | Строгая «песочница» (sandbox): нет доступа к ФС, сети (кроме хоста загрузки), системным свойствам | Полные права (при подписанном коде) |
| Ресурсы | Могут упаковываться в JAR | Любые ресурсы |
Жизненный цикл апплета
Класс Applet предоставляет 5 ключевых методов, которые вызывает браузер/апплет-вьювер:
init()— однократная инициализация (параметры, ресурсы). Вызывается после обработки тегов<param>.start()— запуск/возобновление выполнения (при входе на страницу). Вызывается послеinit()и каждый раз при возврате на страницу.stop()— приостановка (при уходе со страницы). Может вызываться многократно.destroy()— финализация при закрытии браузера/вьювера. Освобождение ресурсов.paint(Graphics g)— отрисовка интерфейса. Вызывается послеstart()и при необходимости перерисовки.
Простейший апплет «Hello World»
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorldApplet extends Applet {
@Override
public void paint(Graphics g) {
g.drawString("Hello World", 25, 50);
}
}
Запуск апплета из HTML
Используется тег <applet> (устарел в HTML5) или <object>:
<html>
<title>Пример апплета</title>
<body>
<applet code="HelloWorldApplet.class" width="320" height="120">
Ваш браузер не поддерживает Java-апплеты.
</applet>
</body>
</html>
Атрибуты: code — имя класса, width/height — размеры. Для классов в пакетах: code="com.example.MyApplet.class". Атрибут codebase задаёт базовый URL для загрузки классов.
Передача параметров апплету
Через теги <param> внутри <applet>:
<applet code="CheckerApplet.class" width="480" height="320">
<param name="color" value="blue">
<param name="squaresize" value="30">
</applet>
В коде апплета: String color = getParameter("color"); (возвращает String, нужно парсить числа).
Работа с изображениями и звуком
Изображения
Image img = getImage(getDocumentBase(), "image.jpg"); // относительный URL
// в paint():
g.drawImage(img, x, y, this);
Звук
AudioClip clip = getAudioClip(getDocumentBase(), "sound.au");
clip.play(); // один раз
clip.loop(); // циклически
clip.stop(); // остановить
Обработка событий
Апплеты наследуют обработку событий от Container. Переопределяйте методы processMouseEvent, processKeyEvent или реализуйте слушатели (Listener'ы):
public class EventApplet extends Applet implements MouseListener {
public void init() { addMouseListener(this); }
public void mouseClicked(MouseEvent e) { /* реакция */ }
// остальные методы интерфейса...
}
Преобразование приложения в апплет
- Создайте HTML-страницу с тегом
<applet>. - Наследуйтесь от
JApplet(Swing) илиApplet(AWT). - Удалите
main()и создание фрейма (JFrame). - Перенесите инициализацию в
init(). - Уберите
setSize(),setVisible(true),setDefaultCloseOperation()— размер задаётся в HTML, окно управляется браузером. - Вместо
setTitle()используйте HTML-тег<title>.
Исторический контекст и альтернативы
Апплеты были популярны в 1990-х и 2000-х для интерактивного веба (графики, калькуляторы, игры). Их вытеснили:
- JavaScript / HTML5 Canvas / WebGL — нативные веб-технологии.
- Java Web Start (JNLP) — для запуска десктопных приложений из браузера (тоже устарел).
- Современные фреймворки — Vaadin, GWT (компиляция Java в JS), Spring Boot + REST API + JS-фронтенд.
java
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Try-with-resources в Java: автоматическое управление ресурсами
- Аннотации в Java: типы, размещение и практические примеры
- Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода
- Понимание Java Vector: использование, особенности и сравнение с ArrayList