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

原文 标签 java jvm low-level

我试图了解在 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/

    相关文章:

    java - 非最终的-不可变的类

    java - 从 C 读取和解释 JVM 内存

    assembly - 要学习汇编 - 我应该从 32 位还是 64 位开始?

    java - spring-data-cassandra无法转换枚举

    java - java-joda datetime类(当前系统时间)?

    java - JNI 从 native 代码调用 JVM 函数/事件?

    java - 在运行时确定JVM可执行文件的位置

    linux - Linux Kernel 0.01支持什么? (处理器架构)

    c - 如何像 shmget 一样在内存中重新映射文​​件 mmap(2)-ed

    java - 有没有办法从 HashMap 之类的对象中获取 Java 的唯一哈希码?