在Java中创建MouseeEvent对象的位置

在Java中创建MouseeEvent对象的位置,java,events,input,mouse,Java,Events,Input,Mouse,我试图跟踪Java如何处理鼠标输入 到目前为止,我已经了解到,每当鼠标设备被点击/移动时,其状态的实际数据都存储在一个文件中(即在Linux中是/dev/input/mouse0或mice文件),然后Java通过Java.io.ObjectInputStream读取文件,并创建Java.awt.MouseEvent,然后由Java.awt.Component(通过Java.awt.AWTEventMulticaster)传递到处理MouseEvent对象的任何组件的鼠标侦听器 我的问题是-在Ja

我试图跟踪Java如何处理鼠标输入

到目前为止,我已经了解到,每当鼠标设备被点击/移动时,其状态的实际数据都存储在一个文件中(即在Linux中是/dev/input/mouse0或mice文件),然后Java通过Java.io.ObjectInputStream读取文件,并创建Java.awt.MouseEvent,然后由Java.awt.Component(通过Java.awt.AWTEventMulticaster)传递到处理MouseEvent对象的任何组件的鼠标侦听器

我的问题是-在Java中,MouseeEvent对象实际上是在哪里创建的

我对观察者模式和如何处理MouseEvent的信息不感兴趣,而是对如何从鼠标输入创建特定的java.awt.MouseEvent感兴趣。
我希望在某个地方有“新的MouseEvent(…)”这句话,但我在任何地方都找不到。非常感谢您的帮助。

事件是在基本对象表示组件的内部处理的,例如AWT it is Component.java

正如你在这里看到的:

它正在使用AWTEventMulticaster:

这是针对AWTEvents的高效且线程安全的多播事件调度的实现


希望我能帮上忙。

我使用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)
():733,MouseEvent(java.awt.event)
DispatchMouseeEvent():775,LWWindowPeer(sun.lwawt)
handleMouseEvent():80,CPlatformResponder(sun.lwawt.macosx)
deliverMouseEvent():195,CPlatformView(sun.lwawt.macosx)

是的,AWTEventMulticaster正在向组件的侦听器发送事件,但这些事件(特别是MouseEvent)来自哪里?正如Danny所说,AWTEventMulticaster和Component类中都没有实际创建MouseeEvent对象的代码。MouseEvent是鼠标(硬件)在每个平台(OSs、Win、Linux)上调度的事件的Java类型。Java虚拟机具有不同的响应程序实例。例如在OSs中。CPlatformResponder调用LWWindowPeer来调度java鼠标事件。Responder是硬件和java虚拟机之间的接口,CPlatformResponder使用LWWindowPeer将硬件调用更改为java类型,如MouseEvent或KeyEvent,其中称为new MouseEvent