2011-05-22 70 views
0

我正在嘗試將JNA集成到JDK 1.3應用程序中。 JNA頁有如下關於這個問題:適用於1.4或更高版本的JVM JDK 1.3中的Java Native Access

(更早的VM可以與存根NIO 支持工作)

我已經成功地端口JNA源通過爲JDK 1.3刪除所有java.nio引用。我不需要例如java.nio.Buffer。

然而,JNA DLL被編譯使用Java NIO類型和accodingly抱怨:

JNA:問題加載核心編號: java.nio.Buffer中

什麼我需要做的讓JNA在JDK 1.3中工作?這個「可能適用於NIO的支持」是什麼意思?

是我唯一選擇從C源代碼中存儲NIO並重新編譯DLL的選項嗎?由於我不擅長C編程,我拼命地試圖避免它。

有沒有其他方法可以在Java中調用本地DLL(不是JNI,稱爲DLL是封閉源代碼和JNI不兼容)。

+2

我想知道是否通過NIO支持來支持它們,它們意味着簡單地使用編譯器所需的NIO類方法的方法存根創建您自己的java.nio類(當然,您不能使用這些方法)。我懷疑你需要爲此編寫C代碼。 – 2011-05-22 16:41:15

回答

5

該文檔建議您編寫一些假類java.nio類,並將它們放在bootclasspath上 - 然後不要使用任何需要java.nio的東西。您不希望修改JNA源代碼或編輯本機代碼。

+2

upvoted。除了這個答案 - 你可能不需要改變任何原生c代碼。或者做這個答案建議或嘗試使用這個版本的JNA http://java.net/jira/browse/JNA-108。作者剝去了NIO,所以你不必這樣做。 – Abhijith 2011-05-22 17:07:07

+0

太好了。謝謝,我會給它一個鏡頭。 – Jurri 2011-05-23 06:44:06

4

JDK 1.3?這是可笑的out of support,除非你在Solaris 8上運行。EOL從七年前開始,並且在2006年11月6日的JDK 6 became available上完成。這幾乎是五年前

我個人認爲,將代碼移植到更現代的JDK上會更好。 JNA告訴你它需要NIO。我聽過這個電話,並從JDK 1.3移開。

+0

Collections API是在JDK 1.2中引入的。 – 2011-05-22 16:48:51

+0

不是泛型的版本。它並沒有改變這一點。您是否贊成堅持使用JDK 1.3?我覺得那很瘋狂。 – duffymo 2011-05-22 16:50:53

+0

我假設他有一些理由使用1.3 - 或許像你說的那樣,在Solaris 8或其他一些舊的操作系統上運行。在任何情況下,你都沒有說1.3沒有泛型,你說它沒有收藏,它肯定是。 – 2011-05-22 16:52:37