Abstract Window Toolkit (AWT) — это исходная платформо-независимая оконная библиотека графического интерфейса (Widget toolkit) языка Java. Сейчас AWT является частью Java Foundation Classes (JFC) — стандартного API для реализации графического интерфейса в Java-программе.
Также AWT является стандартной библиотекой GUI для некоторых профилей Java ME. Например, профили Connected Device Configuration требуют от среды исполнения Java на мобильных телефонах поддержки AWT.
AWT предоставляет два уровня API: Общий интерфейс между Java и родной системой, используемый для управления окнами, события, менеджеры компоновки. Этот API является основой программирования Java GUI и используется также Swing и Java 2D. Он содержит: Интерфейс между родной оконной системой и Java приложением; Ядро обработчика событий интерфейса; Некоторые менеджеры компоновки; Интерфейс к устройствам ввода, таким как мышь и клавиатура; и Пакет java.awt.datatransfer для использования с буфером обмена и Drag and Drop. Базовый набор виджетов графического интерфейса, таких как кнопки, текстовые поля (text box) и меню. Она также предоставляет AWT Native Interface, который позволяет библиотекам в нативном коде рисовать непосредственно на Canvas.
AWT также предоставляет приложениям некоторую высокоуровневую функциональность: Доступ к области уведомлений на поддерживаемых системах; и Возможность запуска некоторых десктопных приложений, таких как веб-браузеры и почтовые клиенты из Java-приложения.
Ни AWT, ни Swing не являются по своей природе потокобезопасными. Таким образом, код, обновляющий GUI, или processes events должны выполняться в Event dispatching thread. Невыполнение этого требования может привести к взаимной блокировке или состязанию. Для решения этой проблемы служебный класс SwingWorker позволяет приложениям выполнять «тяжёлые» обработчики интерфейсных событий в потоке обработки событий.
Начиная с Java 6#Java SE 6 Update 10 смешивание компонентов Swing и основных виджетов AWT часто приводило к нежелательным побочным эффектам, с появлением AWT виджетов над виджетами Swing, независимо от их определенного порядка наложения. Эта проблема объясняется тем, что архитектура рендеринга двух widget toolkits очень разная, несмотря на заимствование Swing’ом тяжеловесных контейнеров верхнего уровня из AWT.
Начиная с Java 6#Java SE 6 Update 12, стало возможно смешивать виджеты Swing and AWT без проблем с порядком наложения.
Так как AWT является мостом к нижележащему нативному пользовательскому интерфейсу, его реализация на новой операционной системе может быть большой работой, главным образом для набора виджетов, которые требуют разработки с нуля нативных peers для каждого из виджетов AWT.
Одновременно с разработкой Java начал разрабатываться проект Caciocavallo. Его целью является предоставление Java API, основанных на OpenJDK для облегчения написания реализаций AWT для новых операционных систем.[2]. Для построения интерфейса используется Java2D.. Все необходимые модификации включены в JDK начиная с версии OpenJDK .