2011-05-22 50 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