Интерфейс EventRequest
- Все суперинтерфейсы:
Mirror
- Все известные подинтерфейсы:
-
AccessWatchpointRequest,BreakpointRequest,ClassPrepareRequest,ClassUnloadRequest,ExceptionRequest,MethodEntryRequest,MethodExitRequest,ModificationWatchpointRequest,MonitorContendedEnteredRequest,MonitorContendedEnterRequest,MonitorWaitedRequest,MonitorWaitRequest,StepRequest,ThreadDeathRequest,ThreadStartRequest,VMDeathRequest,WatchpointRequest
public interface EventRequest extends Mirror
Представляет запрос на уведомление об событии. Примеры включают BreakpointRequest и ExceptionRequest. Когда происходит событие, для которого присутствует разрешенный запрос, EventSet будет помещен в EventQueue. Коллекция существующих запросов на события управляется EventRequestManager.
Количество генерируемых событий для запроса на событие можно контролировать с помощью фильтров. Фильтры предоставляют дополнительные ограничения, которые событие должно удовлетворять, прежде чем оно будет помещено в очередь событий. Несколько фильтров можно использовать, выполняя несколько вызовов методов добавления фильтров, таких как ExceptionRequest.addClassFilter(java.lang.String classPattern). Фильтры добавляются к событию по одному, только когда событие отключено. Несколько фильтров применяются по принципу "И" в порядке их добавления в запрос. Только события, удовлетворяющие всем фильтрам, помещаются в очередь событий.
Набор доступных фильтров зависит от запроса на событие, некоторые примеры фильтров:
- Фильтры потоков позволяют управлять потоком, для которого генерируются события.
- Фильтры классов позволяют управлять классом, в котором происходит событие.
- Фильтры экземпляров позволяют управлять экземпляром, в котором происходит событие.
- Фильтры счётчиков позволяют управлять количеством раз, когда событие сообщается.
Любой метод в EventRequest, который принимает EventRequest, может вызвать VMDisconnectedException, если целевая виртуальная машина отключена и событие VMDisconnectEvent было или доступно для чтения из EventQueue.
Любой метод в EventRequest, который принимает EventRequest, может вызвать VMOutOfMemoryException, если целевая виртуальная машина испытывает недостаток памяти.
- С тех пор:
- 1.3
- См. также:
-
BreakpointEvent,EventQueue,EventRequestManager
Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static int | SUSPEND_ALL | Приостановить все потоки при возникновении события |
static int | SUSPEND_EVENT_THREAD | Приостановить только поток, сгенерировавший событие, при возникновении события |
static int | SUSPEND_NONE | Не приостанавливать ни один поток при возникновении события |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void | addCountFilter(int count) | Ограничить запрашиваемое событие, чтобы оно сообщалось не более одного раза после определенного количества возникновений. |
void | disable() | То же, что и |
void | enable() | То же, что и |
Object | getProperty(Object key) | Возвращает значение свойства со указанным ключом. |
boolean | isEnabled() | Определяет, включен ли данный запрос на событие в данный момент. |
void | putProperty(Object key,
Object value) | Добавить произвольное свойство «ключ/значение» в этот запрос. |
void | setEnabled(boolean val) | Включает или отключает данный запрос на событие. |
void | setSuspendPolicy(int policy) | Определяет потоки для приостановки при возникновении запрошенного события в целевой ВМ. |
int | suspendPolicy() | Возвращает значение, описывающее потоки для приостановки при возникновении запрошенного события в целевой ВМ. |
Mirror
toString, virtualMachine Поля
SUSPEND_NONE
static final int SUSPEND_NONE
Не приостанавливать потоки при возникновении события
- См. также:
- Значения константных полей
SUSPEND_EVENT_THREAD
static final int SUSPEND_EVENT_THREAD
Приостановить только поток, сгенерировавший событие, при возникновении события
- См. также:
- Значения константных полей
SUSPEND_ALL
static final int SUSPEND_ALL
Приостановить все потоки при возникновении события
- См. также:
- Значения константных полей
Методы
isEnabled
boolean isEnabled()
Определяет, включён ли запрос на событие в данный момент.
- Возвращает:
-
trueесли включен;falseв противном случае.
setEnabled
void setEnabled(boolean val)
Включает или отключает запрос на событие. Пока запрос на событие отключен, запрос будет игнорироваться, и целевая виртуальная машина не будет остановлена, если любой из ее потоков достигнет запроса на событие. Отключенные запросы на события всё ещё существуют и включены в списки запросов на события, такие как EventRequestManager.breakpointRequests().
- Параметры:
-
val-trueесли запрос на событие должен быть включён;falseв противном случае. - Исключения:
-
InvalidRequestStateException- если этот запрос был удален. -
IllegalThreadStateException- если это StepRequest,valявляетсяtrue, и поток, указанный в запросе, умер или ещё не запущен.
enable
void enable()
То же, что и setEnabled(true).
- Исключения:
-
InvalidRequestStateException- если этот запрос был удален. -
IllegalThreadStateException- если это StepRequest, и поток, указанный в запросе, умер или еще не запущен.
disable
void disable()
То же, что и setEnabled(false).
- Исключения:
-
InvalidRequestStateException- если этот запрос был удален.
addCountFilter
void addCountFilter(int count)
Ограничивает запрашиваемое событие тем, чтобы оно сообщалось не более одного раза после определённого количества событий. Событие не сообщается в первые count - 1 раз, когда достигается этот фильтр. Чтобы запросить одноразовое событие, вызовите этот метод с параметром количества равным 1.
Когда счёт достигает 0, применяются любые последующие фильтры в этом запросе. Если ни один из этих фильтров не приводит к подавлению события, событие сообщается. В противном случае событие не сообщается. В любом случае последующие события никогда не сообщаются для этого запроса.
- Параметры:
-
count- количество событий до генерации события. - Исключения:
-
InvalidRequestStateException- если этот запрос в настоящее время включён или был удалён. Фильтры могут быть добавлены только к отключённым запросам. -
IllegalArgumentException- еслиcountменьше одного.
setSuspendPolicy
void setSuspendPolicy(int policy)
Определяет потоки, которые будут приостановлены, когда запрашиваемое событие произойдёт в целевой виртуальной машине. Используйте SUSPEND_ALL для приостановки всех потоков в целевой виртуальной машине (по умолчанию). Используйте SUSPEND_EVENT_THREAD для приостановки только потока, который сгенерировал событие. Используйте SUSPEND_NONE для того, чтобы не приостанавливать потоки.
Приостановки потоков через события имеют ту же функциональность, что и явное приостановление. Подробности см. в ThreadReference.suspend() и VirtualMachine.suspend().
- Параметры:
-
policy- выбранная политика приостановки. - Исключения:
-
InvalidRequestStateException- если этот запрос в настоящее время включён или был удалён. Политика приостановки может быть установлена только в отключённых запросах. -
IllegalArgumentException- если параметр политики содержит недопустимое значение.
suspendPolicy
int suspendPolicy()
Возвращает значение, описывающее потоки, которые нужно приостановить при возникновении запрошенного события в целевой виртуальной машине. Возвращаемое значение равно SUSPEND_ALL, SUSPEND_EVENT_THREAD или SUSPEND_NONE.
- Возвращает:
- текущий режим приостановки для этого запроса
putProperty
void putProperty(Object key,
Object value) Добавляет произвольную пару "ключ-значение" ("свойство") к этому запросу. Свойство может использоваться клиентом JDI для связывания прикладной информации с запросом; эти свойства, заданные клиентом, не используются внутренним образом JDI.
Методы get/putProperty обеспечивают доступ к небольшой карте на экземпляр. Это не следует путать с Properties.
Если значение равно null, этот метод удалит свойство.
- См. также:
getProperty(java.lang.Object)
getProperty
Object getProperty(Object key)
Возвращает значение свойства с заданным ключом. Только свойства, добавленные с помощью putProperty(java.lang.Object, java.lang.Object), вернут ненулевое значение.
- Возвращает:
- значение этого свойства или null
- См. также:
putProperty(java.lang.Object, java.lang.Object)
© 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/jdk.jdi/com/sun/jdi/request/EventRequest.html