2013-11-21 55 views
2

我想了解在Java中爲按下的鍵盤鍵創建KeyEvent所涉及的低級過程。JVM進程鍵盤筆劃如何以及在哪裏?

  1. Java如何以及在哪裏處理真正的擊鍵?
  2. 鍵盤「進入」JVM在哪裏?
  3. 鍵盤如何成爲KeyEvent?

我這背後的意圖純粹是爲了瞭解java的內部工作。 作爲獎勵:MouseEvents的過程是否相同,相似或完全不同?


我已經花了一些時間挖掘源代碼。因此,這個問題部分旨在爲「awt」以外的來源和文檔提供一些切入點(因爲awt本身很大)。

也許有包含形成JNI層類一些異國情調的包?

+0

我不認爲這是真正的JVM的一部分,而是無論你使用的Win32庫的什麼包裝。 –

+0

謝謝您的輸入@Jonathon。要重述這個問題的一部分來反映這個想法。 –

+2

*「我這背後的意圖純粹是爲了瞭解java的內部工作。」 * - **閱讀源路**轉到OpenJDK的網站,下載一個源代碼包爲Java 6或7或8,解開它!並開始閱讀。 (如果你有時間去問這樣的問題,你有時間做自己的研究:-)) –

回答

1

如何以及在哪裏呢Java進程真正的按鍵嗎? 鍵盤「進入」JVM的位置在哪裏?

這取決於JVM運行的操作系統/桌面環境。所有現代操作系統都處理與硬件本身的通信,並且不(通常)允許程序直接訪問硬件(以前在MS-DOS等舊系統上這種情況有所不同)。

所以操作系統將接受鍵盤輸入,並將其發送給具有焦點的程序。如果該程序是JVM,則JVM將通過通常的OS特定機制接收鍵盤輸入,然後在內部處理它。

如何擊鍵成爲KeyEvent的?

當JVM收到按鍵時,它將處理它並決定發生什麼。例如,如果一個GUI組件當前具有輸入焦點,則JVM將創建一個KeyEvent並將其發送到此組件。


正如Stephen C指出的,如果您想深入挖掘,您必須閱讀JDK源代碼。這是一個龐大而複雜的軟件,因此希望先做一些搜索。

好的起點可能是page for the The Abstract Windowing Toolkit Group,因爲AWT(Swing之前的Java「舊」GUI框架)仍然處理很多底層GUI代碼的細節。

+0

這個問題實際上是要成爲'研究的一部分工作'你提到。我原本試圖從KeyEvent開始,但事實證明它並不成功。將這個添加到問題中。 –

相關問題