Класс EventQueue

public class EventQueue
extends Object

EventQueue — это платформенно-независимый класс, который очередирует события, как от базовых классов-виртуальных машин, так и от надёжных прикладных классов.

Он инкапсулирует асинхронный механизм обработки событий, который извлекает события из очереди и отправляет их, вызывая метод dispatchEvent(AWTEvent) в этом EventQueue с событием, подлежащим обработке, в качестве аргумента. Конкретное поведение этого механизма зависит от реализации. Единственные требования заключаются в том, чтобы события, которые фактически были помещены в эту очередь (обратите внимание, что события, размещаемые в EventQueue, могут быть объединены), были обработаны:

Последовательно.
То есть не допускается одновременная обработка нескольких событий из этой очереди.
В том же порядке, в котором они были помещены в очередь.
То есть, если событие AWTEvent A помещено в EventQueue до события AWTEvent B, то событие B не будет обработано до события A.

Некоторые браузеры разделяют апплеты в разных кодовых базах на отдельные контексты и устанавливают барьеры между этими контекстами. В такой ситуации будет по одному EventQueue на каждый контекст. Другие браузеры размещают все апплеты в одном контексте, что подразумевает наличие только одной глобальной EventQueue для всех апплетов. Это поведение зависит от реализации. Обратитесь к документации вашего браузера для получения дополнительной информации.

Сведения о проблемах с потоками в механизме обработки событий см. в разделе Проблемы с потоками AWT.

С:
1.1

Конструкторы

Конструктор Описание
EventQueue()

Инициализирует новый экземпляр EventQueue.

Методы

Модификатор и тип Метод Описание
SecondaryLoop createSecondaryLoop()

Создаёт новый secondary loop, связанный с этой очередью событий.

protected void dispatchEvent​(AWTEvent event)

Обрабатывает событие.

static AWTEvent getCurrentEvent()

Возвращает событие, в настоящее время обрабатываемое EventQueue потоком, связанным с вызывающим потоком.

static long getMostRecentEventTime()

Возвращает метку времени самого последнего события, содержащего метку времени и обработанного из EventQueue потоком, связанным с вызывающим потоком.

AWTEvent getNextEvent()

Удаляет событие из EventQueue и возвращает его.

static void invokeAndWait​(Runnable runnable)

Приводит к тому, что у runnable вызывается метод run в потоке dispatch thread the system EventQueue.

static void invokeLater​(Runnable runnable)

Приводит к тому, что у runnable вызывается метод run в потоке dispatch thread the system EventQueue.

static boolean isDispatchThread()

Возвращает true, если вызывающий поток является потоком обработки the current AWT EventQueue.

AWTEvent peekEvent()

Возвращает первое событие в очереди EventQueue без удаления.

AWTEvent peekEvent​(int id)

Возвращает первое событие с заданным идентификатором, если таковое имеется.

protected void pop()

Останавливает обработку событий с помощью этой EventQueue.

void postEvent​(AWTEvent theEvent)

Посылает событие в стиле 1.1 в EventQueue.

void push​(EventQueue newEventQueue)

Заменяет существующее EventQueue указанным.

Методы, объявленные в классе java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

EventQueue

public EventQueue()

Инициализирует новый экземпляр EventQueue.

Методы

postEvent

public void postEvent(AWTEvent theEvent)

Отправляет событие в стиле 1.1 в EventQueue. Если в очереди уже есть событие с тем же идентификатором и источником события, вызывается метод Component источника coalesceEvents.

Параметры:
theEvent - экземпляр java.awt.AWTEvent, или подкласс его
Исключения:
NullPointerException - если theEvent является null

getNextEvent

public AWTEvent getNextEvent()
                      throws InterruptedException

Удаляет событие из EventQueue и возвращает его. Этот метод будет заблокирован до тех пор, пока другое потоком не будет добавлено событие в очередь.

Возвращает:
следующее AWTEvent
Исключения:
InterruptedException - если какой-либо поток прервал данный поток

peekEvent

public AWTEvent peekEvent()

Возвращает первое событие в очереди EventQueue без его удаления.

Возвращает:
первое событие

peekEvent

public AWTEvent peekEvent(int id)

Возвращает первое событие с указанным идентификатором, если такое есть.

Параметры:
id - идентификатор искомого типа события
Возвращает:
первое событие с указанным идентификатором или null если такого события нет

dispatchEvent

protected void dispatchEvent(AWTEvent event)

Обрабатывает событие. Способ обработки события зависит от типа события и типа объекта-источника события:

Тип события Тип источника Обработка события
ActiveEvent Любой event.dispatch()
Другое Компонент source.dispatchEvent(AWTEvent)
Другое MenuComponent source.dispatchEvent(AWTEvent)
Другое Другое Без действия (игнорируется)

Параметры:
event - экземпляр java.awt.AWTEvent, или подкласс его
Исключения:
NullPointerException - если event является null
С:
1.2

getMostRecentEventTime

public static long getMostRecentEventTime()

Возвращает метку времени последнего события, имеющего метку времени, которое было обработано в EventQueue потока вызова. Если событие с меткой времени в настоящее время обрабатывается, возвращается его метка времени. Если события еще не обрабатывались, возвращается время инициализации очереди EventQueue. В текущей версии JDK только InputEventы, ActionEventы и InvocationEventы имеют метки времени; однако в будущих версиях JDK метки времени могут быть добавлены к другим типам событий. Обратите внимание, что этот метод должен вызываться только из приложения в event dispatching thread. Если этот метод вызывается из другого потока, возвращается текущее системное время (как указано System.currentTimeMillis()).

Возвращает:
метку времени последнего InputEvent, ActionEvent, или InvocationEvent, или System.currentTimeMillis(), если этот метод вызывается в потоке, отличном от потока обработки событий
С:
1.4
См. также:
InputEvent.getWhen(), ActionEvent.getWhen(), InvocationEvent.getWhen(), isDispatchThread()

getCurrentEvent

public static AWTEvent getCurrentEvent()

Возвращает событие, которое в настоящее время обрабатывается EventQueue, связанным с вызывающим потоком. Это полезно, если методу нужен доступ к событию, но он не был разработан для получения ссылки на него в качестве аргумента. Обратите внимание, что этот метод должен вызываться только из потока обработки событий приложения. Если этот метод вызывается из другого потока, возвращается null.

Возвращает:
событие, которое в настоящее время обрабатывается, или null, если этот метод вызывается в потоке, отличном от потока обработки событий
С:
1.4

push

public void push(EventQueue newEventQueue)

Заменяет существующую EventQueue на указанную. Все ожидающие события передаются новой EventQueue для обработки.

Параметры:
newEventQueue - экземпляр EventQueue (или его подкласс) для использования
Исключения:
NullPointerException - если newEventQueue является null
С:
1.2
См. также:
pop()

pop

protected void pop()
            throws EmptyStackException

Останавливает обработку событий с использованием этого EventQueue. Все ожидающие события передаются предыдущему EventQueue для обработки.

Предупреждение: чтобы избежать тупика, не объявляйте этот метод синхронизированным в подклассе.

Исключения:
EmptyStackException - если предыдущий вызов push для данного EventQueue не был выполнен
С:
1.2
См. также:
push(java.awt.EventQueue)

createSecondaryLoop

public SecondaryLoop createSecondaryLoop()

Создает новую secondary loop, связанную с этой очередью событий. Используйте методы SecondaryLoop.enter() и SecondaryLoop.exit(), чтобы начать и остановить цикл обработки событий и обработать события из этой очереди.

Возвращает:
secondaryLoop Новый объект вторичного цикла, который может использоваться для запуска нового вложенного цикла обработки событий и обработки событий из этой очереди
С:
1.7
См. также:
SecondaryLoop.enter(), SecondaryLoop.exit()

isDispatchThread

public static boolean isDispatchThread()

Возвращает true, если вызывающий поток является потоком диспетчера the current AWT EventQueue. Используйте этот метод, чтобы убедиться, что определенная задача выполняется (или не выполняется) там.

Примечание: используйте методы invokeLater(java.lang.Runnable) или invokeAndWait(java.lang.Runnable), чтобы выполнить задачу в потоке диспетчера the current AWT EventQueue.

Возвращает:
true, если выполняется в потоке диспетчера the current AWT EventQueue
С:
1.2
См. также:
invokeLater(java.lang.Runnable), invokeAndWait(java.lang.Runnable), Toolkit.getSystemEventQueue()

invokeLater

public static void invokeLater(Runnable runnable)

Вызывает метод runnable объекта run в потоке диспетчера dispatch thread объекта the system EventQueue. Это произойдет после обработки всех ожидающих событий.

Параметры:
runnable - объект Runnable, чьей метод run должен быть выполнен асинхронно в потоке диспетчера event dispatch thread объекта the system EventQueue.
С:
1.2
См. также:
invokeAndWait(java.lang.Runnable), Toolkit.getSystemEventQueue(), isDispatchThread()

invokeAndWait

public static void invokeAndWait(Runnable runnable)
                          throws InterruptedException,
                                 InvocationTargetException

Вызывает метод runnable объекта run в потоке диспетчера dispatch thread объекта the system EventQueue. Это произойдет после обработки всех ожидающих событий. Вызов блокируется до тех пор, пока это не произойдет. Этот метод выбросит ошибку, если вызывается из потока диспетчера event dispatcher thread.

Параметры:
runnable - объект Runnable, чьей метод run должен быть выполнен синхронно в потоке диспетчера event dispatch thread объекта the system EventQueue.
Исключения:
InterruptedException - если какой-либо поток прервал данный поток
InvocationTargetException - если при выполнении runnable возникает исключение
С:
1.2
См. также:
invokeLater(java.lang.Runnable), Toolkit.getSystemEventQueue(), isDispatchThread()

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/java/awt/EventQueue.html

Spec-Zone .ru
спецификации, руководства, описания, API