【问题标题】:How and where does the JVM process keyboard strokes?JVM 如何以及在哪里处理键盘敲击?
【发布时间】:2013-11-21 08:06:28
【问题描述】:

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

  1. Java 如何以及在何处处理真正的击键?
  2. 击键在哪里“进入”JVM?
  3. 击键如何变成 KeyEvent?

我这样做的目的纯粹是为了了解 java 的内部工作原理。 作为奖励:MouseEvents 的过程是相同、相似还是完全不同?


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

也许有一些奇异的包包含构成 JNI 层的类?

【问题讨论】:

  • 我认为这根本不是 JVM 的一部分,而是您正在使用的 Win32 库的任何包装器。
  • 感谢您的意见@Jonathon。将改写问题的一部分以反映这种想法。
  • “我这样做的目的纯粹是为了了解 java 的内部工作原理。” - 阅读源 Luke! 访问 OpenJDK 站点,下载 Java 6 或 7 或 8 的源代码包,解压缩并开始阅读。 (如果你有时间问这样的问题,你就有时间做自己的研究:-))
  • 它取决于操作系统,但它是 AWT 库的一部分

标签: java jvm low-level


【解决方案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 代码的许多低级细节。

【讨论】:

  • 这个问题实际上是你提到的“研究工作”的一部分。我最初试图从 KeyEvents 开始自上而下,但事实证明这是不成功的。将其添加到问题中。
猜你喜欢
  • 2013-03-27
  • 1970-01-01
  • 2013-02-07
  • 2011-05-09
  • 2021-08-06
  • 2011-08-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多