2009-11-19 244 views

回答

3

原則上是的,但它需要一些C代碼和JNI才能將其與Java結合。如果你非常幸運,也許已經有人已經爲你感興趣的平臺建立了合適的庫。

底線:如果它可以在C中完成,你可以將它鉤到Java。

+0

@djna,謝謝你的回答。我一直在尋找這樣的Java庫,但徒勞無功。 – 2009-11-19 08:13:03

+0

@Sigh - 您需要一個與您的操作系統和硬件環境相匹配的本地庫。 JNI部分沒有魔法,網上有一些教程。 – 2009-11-19 08:27:50

4

可能有其他選擇。

我正在做類似的事情:在一個應用程序中,我監視4只老鼠的點擊。這些點擊會產生中斷,但我很高興不會直接從Java處理它們。在Linux下

,原來有設備文件(/dev/input/mouse#),其噴出一串字符的東西時,用鼠標發生。我有一個線程與讀取阻塞的FileReader每個人。一旦字符到達,相關線程解鎖,我可以做任何我喜歡的處理。

所以這個想法是:如果可能的話,找到一種方法來獲取設備驅動程序,以便以文件/設備形式訪問您的數據,然後您可以使用來自Java庫的IO調用從Java訪問它,沒有奇怪的比特代碼和C之間需要。

1

這是處理相同主題的paper。你可能會看看SWT,我認爲他們正在處理硬件中斷,儘管他們可能依賴於操作系統API。

0

它是嵌入式實時Java的標準。去www.ajile.com或systrmonx.com購買評估板。

嵌入式java是而不是 pc上的標準。您可以在PC硬件上獲得實時Java,但不能嵌入位。

0

看看SwigJava implementationDirectors,它允許你從C/C++調用Java。我已經使用這種技術來處理調用到C#中的中斷,並且它工作得很好。調用Java應該不會有太大的不同。

2

如果您想直接從Java中斷響應,那麼該VM必須運行在內核空間(或在某些系統上與用戶空間的驅動,在驅動程序上下文)。 JamaicaVM在一些RTOS上以這種模式運行,例如Thread-X或VxWorks作爲DKM。 RTSJ的下一個版本將支持用Java編寫中斷服務例程。

的RTSJ可用於甚至在用戶空間中運行第二級中斷處理程序。這需要一個小型設備驅動程序,它可以向VM發送POSIX信號,或者提供字符設備接口,其中VM中的一個線程在讀取設備時阻塞。在第一種情況下,一個AsyncEventHandler可以與POSIX信號相關聯。在第二種情況下,每次從設備讀取一個字節時,阻塞設備讀取的踩點可以觸發AsyncEvent。然後將發佈任何附加到AsyncEvebt的AsyncEventHandler。

如果你想嘗試這種在Linux下,你可以下載JamaicaVM個人版:「http://www.aicas.com/jamaica-pe.html」。 JamaicaVM有一個實時垃圾回收器,代碼可以靜態編譯以確保實時性能。這是一個不同於傳統JVM的部署模型。