首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JNA与IBM J9 JVM一起使用

将JNA与IBM J9 JVM一起使用
EN

Stack Overflow用户
提问于 2011-05-20 04:34:54
回答 2查看 1.5K关注 0票数 3

在J9中使用JNA的第一个困难是,Native不包括java.awt包,并且J9类从这个包中导入了几个类。这很容易克服,方法是下载JNA源代码,删除这些导入及其依赖的方法(我无论如何都不会使用这些方法),然后构建一个新的JNA jar。

下面是一个简单的测试程序:

代码语言:javascript
复制
    public class TestJni {
        public static void main(String[] args) {
            CLibrary instance = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);     
            instance.printf("Hello, World\n", new Object[] {});
        }

        // This is the standard, stable way of mapping, which supports extensive
        // customization and mapping of Java to native types.
        public interface CLibrary extends Library {        
            void printf(String format, Object[] args);
        }
    }

更正java.awt问题后,我收到以下错误:

代码语言:javascript
复制
Caused by: java.lang.UnsatisfiedLinkError: C:\DOCUME~1\TSO0112\LOCALS~1\Temp\jna72681.dll (Incompatible JNI version (not 1.1, 1.2 or 1.4))
at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:973)
at java.lang.System.load(System.java:459)
at com.sun.jna.Native.loadNativeLibraryFromJar(Native.java:696)
at com.sun.jna.Native.loadNativeLibrary(Native.java:620)
at com.sun.jna.Native.<clinit>(Native.java:104)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:187)
at TestJni.main(TestJni.java:8)

“不兼容的JNI版本”是什么意思?有没有人让J9和JNA合作得很好?

更新:我认为JNA在试图加载java.nio.Buffer类时隐藏了以下NoClassDefFoundError,因为J9显然没有包含NIO包:

代码语言:javascript
复制
JNA: Problems loading core IDs: java.nio.Buffer
Exception in thread "main" java.lang.NoClassDefFoundError: java.nio.Buffer
    at java.lang.ClassLoader.loadLibraryWithPath(Native Method)
    at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:965)
    at java.lang.System.load(System.java:459)
    at TestJni.main(TestJni.java:8)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-20 21:04:04

我已经在j9上和JNA合作了几个月了。我在这里和那里有一些小问题,但大多数事情看起来都很好。

首先-JNA的最新版本(3.2.7)似乎引入了awt。我使用的是3.2.4,awt导入被注释掉了。我认为这对你来说是开箱即用的。

我正在使用的J9的第二个THe版本是针对WinCE的,它是针对java1.4的JVM。不过,最新的JNA是基于java1.5构建的。因此,您可能希望检查您的j9版本是基于哪个版本的java构建的。我相信JNA 3.2.4与java 1.4是兼容的。

票数 1
EN

Stack Overflow用户

发布于 2011-07-01 20:26:03

您还可以简单地提供您自己的java.nio/java.awt存根实现,并简单地避免使用这些特性(主要是直接缓冲区填充和获取本机窗口的句柄)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6064562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档