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

标签 java jvm low-level

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

  1. Java 如何以及在哪里处理真实的击键?
  2. 击键在何处“进入”JVM?
  3. 击键如何成为 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/

相关文章:

java - JPanel闪烁问题

java - 如何替换引号之间出现的任何单词

scala - Spark序列化错误之谜

performance - android studio无法打开

java - 如何使用rejava (reJ) 来调试jave 字节码? (java字节码编辑器)

C 低级 I/O : Bad address when reading a file

java - 如何更改 char 数组中的 2 个以上值?

java - UndoRedo.Manager 和 JCheckBox

c - 我无法理解我们看到的字符之间的抽象以及计算机如何处理它们

operating-system - 什么是INT 21h?