openjdk.ruOpenJDK на русском

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.

Описание

Мы удалим следующие элементы API платформы Java:

  • Весь пакет java.applet, включающий:

    • java.applet.Applet
    • java.applet.AppletContext
    • java.applet.AppletStub
    • java.applet.AudioClip
  • Следующие дополнительные классы:

    • java.beans.AppletInitializer
    • javax.swing.JApplet
  • Все оставшиеся элементы API, ссылающиеся на перечисленные выше классы и интерфейсы, включая методы и поля в:

    • java.beans.Beans
    • javax.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 отсутствует.