JVM如何以及在何处处理键盘敲击?

时间:2013-11-21 08:06:28

标签: java jvm low-level

我试图理解在java中为按下的键盘键创建KeyEvent所涉及的低级过程。

  1. Java如何以及在何处处理真正的击键?
  2. 击键在哪里“输入”JVM?
  3. 击键如何成为KeyEvent?
  4. 我背后的意图纯粹是为了理解java的内部工作原理。 作为奖励:MouseEvents的过程是相同的,相似的还是完全不同的?


    我已经花了一些时间挖掘源代码。因此,这个问题的部分目的是提供除“awt”以外的源和文档的一些入口点(因为awt本身很大)。

    也许有一些包含构成JNI层的类的外来包?

1 个答案:

答案 0 :(得分:1)

  

Java如何以及在何处处理真正的击键?   击键在哪里“输入”JVM?

这取决于运行JVM的操作系统/桌面环境。所有现代操作系统都处理与硬件本身的通信,并且(通常)不允许程序直接进行硬件访问(在MS-DOS等旧系统上这种情况曾经不同)。

因此操作系统将接受键盘输入,并将其发送到具有焦点的程序。如果该程序是JVM,JVM将通过通常的特定于操作系统的机制接收键盘输入,然后在内部进行处理。

  

键击如何成为KeyEvent?

当JVM收到击键时,它会处理它并决定发生了什么。例如,如果GUI组件当前具有输入焦点,则JVM将创建KeyEvent并将其发送到此组件。


正如Stephen C所指出的,如果你想深入挖掘,你将不得不阅读JDK源代码。这是一个庞大而复杂的软件,所以期望先进行一些搜索。

一个好的起点可能是page for the The Abstract Windowing Toolkit Group,因为AWT(Java的“旧”GUI框架,在Swing之前)仍然处理很多GUI代码的低级细节。