2015-01-19 2 views
2

Я пытаюсь отслеживать, как Java обрабатывает ввод мыши.Где объекты MouseEvent создаются в Java

До сих пор я узнал, что всякий раз, когда мышь или клик мыши, фактические данные в его состоянии хранятся в файле (то есть в Linux это файл/dev/input/mouse0 или mice file), тогда Java читает файл через java.io.ObjectInputStream и создает java.awt.MouseEvent, который затем передается java.awt.Component (через java.awt.AWTEventMulticaster) любому слушателю мыши Component, где обрабатывается объект MouseEvent.

Мой вопрос: где на Java фактически созданы объекты MouseEvent?

Меня не интересует шаблон наблюдателя и информация о том, как обрабатываются MouseEvents, но как определенный java.awt.MouseEvent создается с ввода мыши. Я бы ожидал, что есть где-то «новое предложение MouseEvent (...)», но я не могу найти его нигде. Большое спасибо за вашу помощь.

ответ

1

События обрабатываются внутри базовых объектов представляет собой компоненты, например для AWT это Component.java

, как вы можете увидеть здесь:

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/awt/Component.java

Он использует AWTEventMulticaster: http://docs.oracle.com/javase/7/docs/api/java/awt/AWTEventMulticaster.html

Какая реализация эффективной и потокобезопасной многоадресной диспетчеризации событий для AWTEvents.

Надеюсь, что я помог.

+0

Да, AWTEventMulticaster является диспетчеризацией события слушателей компонента, но где эти события (MouseEvent особенно) взялся? В AWTEventMulticaster и в классе Component нет кода, который фактически создает объект MouseEvent. – mtx

+1

Как сказал Дэнни. MouseEvent - это тип Java для событий, отправленных мышью (аппаратными средствами) на каждой платформе (ОС, Win, Linux). В виртуальной машине Java есть другой экземпляр ответчика. Например, в ОС. Это CPlatformResponder, который вызывает LWWindowPeer для отправки события java mouse. Ответчик - это интерфейс между оборудованием и виртуальной машиной Java, а CPlatformResponder изменяет аппаратные вызовы на типы Java, такие как MouseEvent или KeyEvent, с использованием LWWindowPeer, где вызывается новый MouseEvent https://searchcode.com/codesearch/view/17983141/#l-42 – pesoklp13

0

Я использовал IntelliJ IDE, чтобы поставить точку останова на всех MouseEvent конструкторами и обнаружил, что MouseEvent создание происходит в sun.lwawt.* пакета пространстве, (в частности, на Mac, но я подозреваю, что нечто подобное происходит и для других операционных систем). Для моей машины, StackTrace содержит:

<init>(): 733, MouseEvent (java.awt.event) 
    dispatchMouseEvent(): 775, LWWindowPeer (sun.lwawt) 
    handleMouseEvent(): 80, CPlatformResponder (sun.lwawt.macosx) 
    deliverMouseEvent(): 195, CPlatformView (sun.lwawt.macosx) 
Смежные вопросы