JEP 504: Remove the Applet API
Удаление Applet API
| Ответственный | Philip Race |
| Тип | Feature |
| Область | SE |
| Статус | Closed / Delivered |
| Выпуск | 26 |
| Компонент | client-libs / java.awt |
| Обсуждение | client dash libs dash dev at openjdk dot org |
| Трудоёмкость | S |
| Длительность | S |
| Связан с | JEP 289: Deprecate the Applet API |
| JEP 398: Deprecate the Applet API for Removal | |
| Рецензенты | Kevin Rushforth, Victor Dyakov |
| Одобрен | Kevin Rushforth |
| Создан | 2024/12/04 20:33 |
| Обновлён | 2026/03/03 14:45 |
| Задача | 8345525 |
Аннотация
Удалить Applet API, который получил статус Deprecated for Removal (устаревший, будет удалён) в JDK 17 (2021). Он утратил актуальность, поскольку апплеты не поддерживаются ни последними выпусками JDK, ни современными веб-браузерами.
Мотивация
-
Веб-браузеры больше не поддерживают апплеты.
-
Applet API и инструмент
appletviewerполучили статус Deprecated (устаревший) в JDK 9 в рамках JEP 289 (2017), когда производители веб-браузеров уже убирали поддержку апплетов. -
Инструмент
appletviewer, позволявший тестировать апплеты без браузера, был удалён в JDK 11 (2018). С тех пор запустить апплеты средствами JDK невозможно. -
Applet API получил статус Deprecated for Removal в JDK 17 в рамках JEP 398 (2021).
-
Security Manager — необходимая опора для запуска апплетов, изолировавшая недоверенный код в песочнице, — был окончательно отключён в JDK 24 в рамках JEP 486 (2025).
Нет причин сохранять неиспользуемый и непригодный к использованию Applet API.
Описание
Мы удалим следующие элементы API платформы Java:
-
Весь пакет
java.applet, включающий:java.applet.Appletjava.applet.AppletContextjava.applet.AppletStubjava.applet.AudioClip
-
Следующие дополнительные классы:
java.beans.AppletInitializerjavax.swing.JApplet
-
Все оставшиеся элементы API, ссылающиеся на перечисленные выше классы и интерфейсы, включая методы и поля в:
java.beans.Beansjavax.swing.RepaintManager
Тестирование
Все тесты, которые зависят от Applet API, потребуется обновить, отключить или удалить. Для тестов на основе jtreg в основном репозитории JDK эта работа почти завершена. Большинство таких тестов просто используют Applet API для удобства; явно тестируют этот API лишь немногие из них.
Риски и допущения
-
Поскольку Applet API в значительной степени непригоден к использованию, его удаление не несёт существенных рисков для пользовательских приложений.
-
Приложения, которые всё ещё используют Applet API, либо останутся на более старых выпусках, либо перейдут на какой-либо другой API. В случаях, когда класс
Appletслужит контейнерным компонентом пользовательского интерфейса, AWT API предлагает несколько альтернатив. В случаях, когда класс AudioClip служит удобным API для воспроизведения звука, альтернативой служит класс javax.sound.SoundClip, появившийся в JDK 25. -
Методы
getContent()классовjava.net.URLиjava.net.URLConnectionвозвращают типjava.lang.Object. Точный тип возвращаемого объекта зависит от типа содержимого; при использовании этих методов вызывающий код должен проверить тип возвращённого объекта, чтобы им воспользоваться.Исторически эти методы
getContent()возвращали экземплярыjava.applet.AudioClip, если содержимое представляло собой аудиоданные, распознанные встроенными обработчиками содержимого JDK. После удаления Applet API это станет невозможно, и будут возвращаться экземпляры какого-то другого типа. Код, который приводит результат вызова этих методов кAudioClip, больше не будет компилироваться или выполняться и потребует доработки. -
Инструмент
jtregссылается на Applet API, поэтому его необходимо собирать с помощью JDK, который ещё поддерживает апплеты. Впрочем, это требуется в любом случае, посколькуjtregдолжен уметь тестировать линейки выпусков JDK более старые, чем те, что поддерживает текущий компиляторjavac. Во время выполненияjtregзагружает Applet API, только когда встречает тест на основе апплетов, поэтому одна сборкаjtregможет поддерживать как более старые сборки JDK, так и более новые, в которых Applet API отсутствует.