我试图了解在 java 中为按下的键盘键创建 KeyEvent 所涉及的低级过程。
- Java 如何以及在哪里处理真实的击键?
- 击键在何处“进入”JVM?
- 击键如何成为 KeyEvent?
我这样做的目的纯粹是为了了解 java 的内部工作原理。 作为奖励:MouseEvents 的过程是相同的、相似的还是完全不同的?
我已经花了一些时间挖掘源代码。因此,这个问题的部分目的是为“awt”以外的源代码和文档提供一些切入点(因为 awt 本身很大)。
也许有一些奇特的包包含构成 JNI 层的类?
最佳答案
How and where does Java process real keystrokes? Where does a keystroke 'enter' the JVM?
这取决于运行 JVM 的操作系统/桌面环境。所有现代操作系统都自行处理与硬件的通信,并且(通常)不允许程序直接访问硬件(这在 MS-DOS 等旧系统上是不同的)。
因此操作系统将接受键盘输入,并将其发送给具有焦点的程序。如果该程序是 JVM,则 JVM 将通过通常的、特定于操作系统的机制接收键盘输入,然后在内部进行处理。
How does a keystroke become a KeyEvent?
当 JVM 接收到击键时,它将对其进行处理并决定必须发生什么。例如,如果一个 GUI 组件当前有输入焦点,JVM 将创建一个 KeyEvent 并将其发送到该组件。
正如 Stephen C 所指出的,如果您想深入挖掘,则必须阅读 JDK 源代码。这是一款庞大而复杂的软件,因此希望先进行一些搜索。
一个好的起点可能是 page for the The Abstract Windowing Toolkit Group ,因为 AWT(Java 的“旧”GUI 框架,在 Swing 之前)仍然处理 GUI 代码的许多低级细节。
关于java - JVM 如何以及在何处处理键盘敲击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115492/