今天上网查了N多关于java事件响应的原理,但能搜索到的基本都是说如何如何实现java事件监听,没有找到想要的结果。有没有谁懂得,java在实现监听的时候底层是如何实现的?想要细致到数据结构级别的,如果能把线程或者进程如何操作数据(我想应该有消息链表),比如鼠标点击,产生了一个事件对象,这个对象是如何存放的(这个应该是面向对象都要解决的问题)。组件被注册上了一个监听器,在内存的数据,谁的数据进行了哪些修改?它们的数据结构是什么样的?所谓的事件对象被发送到监听者,实际的操作是什么(归根结底应该还是函数调用)?

解决方案 »

  1.   

    不同的操作系统平台实现肯定是不一样的。比如在 Windows 系统上,你创建一个窗口,在某个坐标,产生了什么点击事件,这些都是操作系统告诉你的。Windows 是闭源的,你没法获知也无需关心这其中的细节,Java 只是对此进行了封装而已。Java 本身不提供诸如如何监测鼠标的动作的具体实现,只是使用操作系统本身的鼠标事件通知的相关 API。
      

  2.   

    没你想的那么复杂,所谓的监听就是你 所注意的某项动作在执行前,执行中,或执行后, 调用了你的监听器而已
    所谓的监听器,也就是一段小程序比如你要监听 Peson类的创建,只需要在Person类的构造中 加上监听器即可比如你要监听Person类中某个方法的执行,只需要在方法中加上监听器即可,喜欢的话你 还可以把方法的参数传到你的监听器中去做某些处理比如你要箭筒Person类的销毁,你可以先为Person类添加一个destory方法,再在该方法中调用监听器即可当然了,这些都是入侵式的监听,会破坏你的Person类中原有代码(你添加了监听器的额外代码不是吗?),是不提倡的,为了方便你理解我才举了以上的例子正儿八经的监听器一般是切面式的,或者通过代理类增强的(这句话忽视也没关系)这么通俗易懂的比喻应该看得懂吧
      

  3.   

    Java是通过虚拟机与操作系统交互的,在java中有native方法,这些方法负责调用动态函数库,在windows下是一些.dll文件,在linux下是一些.so文件,这些函数库是用c或者c++去写的,负责与操作系统的api进行交互,java没有办法直接于操作系统进行交互。
      

  4.   

    java时间监听机制,是由native方法提供的,也就是底层的c语言提供的(java是由c语言写的),c语言是由机器语言监听(0-10101010101010)的,
    在说白点,相当于人的神经反射一样,并不是由你自己的主动去知道,而是神经的自然反射,跟java无关
      

  5.   

    swing中有个例子,swing是事件监听是通过一个监听线程轮询,监听事件对象,一旦发现事件发生,调用相应的事件监听器进行处理,这种应该是事件拉取的方式。还有一种类似的是观察者模式,由事件源去直接调用相应的监听器回调处理事件。
      

  6.   

    设计模式 之 命令模式 应用  java事件监听原理http://www.verejava.com/?id=17175199279755