Класс EventQueue
- java.lang.Object
-
- java.awt.EventQueue
public class EventQueue extends Object
EventQueue — это платформенно-независимый класс, который очередирует события, как от базовых классов-виртуальных машин, так и от надёжных прикладных классов.
Он инкапсулирует асинхронный механизм обработки событий, который извлекает события из очереди и отправляет их, вызывая метод dispatchEvent(AWTEvent) в этом EventQueue с событием, подлежащим обработке, в качестве аргумента. Конкретное поведение этого механизма зависит от реализации. Единственные требования заключаются в том, чтобы события, которые фактически были помещены в эту очередь (обратите внимание, что события, размещаемые в EventQueue, могут быть объединены), были обработаны:
- Последовательно.
- То есть не допускается одновременная обработка нескольких событий из этой очереди.
- В том же порядке, в котором они были помещены в очередь.
- То есть, если событие
AWTEventA помещено вEventQueueдо событияAWTEventB, то событие B не будет обработано до события A.
Некоторые браузеры разделяют апплеты в разных кодовых базах на отдельные контексты и устанавливают барьеры между этими контекстами. В такой ситуации будет по одному EventQueue на каждый контекст. Другие браузеры размещают все апплеты в одном контексте, что подразумевает наличие только одной глобальной EventQueue для всех апплетов. Это поведение зависит от реализации. Обратитесь к документации вашего браузера для получения дополнительной информации.
Сведения о проблемах с потоками в механизме обработки событий см. в разделе Проблемы с потоками AWT.
- С:
- 1.1
Конструкторы
| Конструктор | Описание |
|---|---|
EventQueue() | Инициализирует новый экземпляр |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
SecondaryLoop | createSecondaryLoop() | Создаёт новый |
protected void | dispatchEvent(AWTEvent event) | Обрабатывает событие. |
static AWTEvent | getCurrentEvent() | Возвращает событие, в настоящее время обрабатываемое |
static long | getMostRecentEventTime() | Возвращает метку времени самого последнего события, содержащего метку времени и обработанного из |
AWTEvent | getNextEvent() | Удаляет событие из |
static void | invokeAndWait(Runnable runnable) | Приводит к тому, что у |
static void | invokeLater(Runnable runnable) | Приводит к тому, что у |
static boolean | isDispatchThread() | Возвращает true, если вызывающий поток является потоком обработки |
AWTEvent | peekEvent() | Возвращает первое событие в очереди |
AWTEvent | peekEvent(int id) | Возвращает первое событие с заданным идентификатором, если таковое имеется. |
protected void | pop() | Останавливает обработку событий с помощью этой |
void | postEvent(AWTEvent theEvent) | Посылает событие в стиле 1.1 в |
void | push(EventQueue newEventQueue) | Заменяет существующее |
Методы, объявленные в классе 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