我试图理解在java中为按下的键盘键创建KeyEvent所涉及的低级过程。
我背后的意图纯粹是为了理解java的内部工作原理。 作为奖励:MouseEvents的过程是相同的,相似的还是完全不同的?
我已经花了一些时间挖掘源代码。因此,这个问题的部分目的是提供除“awt”以外的源和文档的一些入口点(因为awt本身很大)。
也许有一些包含构成JNI层的类的外来包?
答案 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代码的低级细节。