当我使用命令java -jni HelloWorld时,我遇到了麻烦

时间:2017-10-07 08:14:18

标签: java java-native-interface

我正在学习如何使用jni(java本机接口),并遵循博客提供的步骤。我创建了一个名为'HelloWorld.java'的java文件,内容如下:

public class HelloWorld { 
    public native void displayHelloWorld(); 
    static { 
        System.loadLibrary("HelloWorldImpl"); 
    } 
    public static void main(String[] args) 
    { 
    // TODO Auto-generated method stub 
        HelloWorld helloWorld = new HelloWorld(); 
        helloWorld.displayHelloWorld(); 
    } 
}

然后我执行这个命令:

javac HelloWorld

没有发生错误,但是当我执行此命令时:

javah -jni HelloWorld

然后我收到错误:

can't find class "HelloWorld"

我确信,这个目录有已编译的HelloWorld.class文件。

开发者:

jdk8
windows 10 64bits

我有谷歌很长一段时间,并问我的同学谁成功使用相同的步骤,但无法解决这个问题,我的笔记本电脑出了什么问题? 有人可以帮助我吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

首先,确保使用包。它不是强制性的,但它简化了事情。

然后,在编译了java代码之后,请确保使用:

javah -jni -cp . HelloWorld

您也可以在某个位置创建头文件

javah -jni -d c -cp . HelloWorld
# -d c     -> header files will be created inside directory called "c"

我还建议将类编译到某个子目录中:

javac -d target HelloWorld.java
# compiled classes will be inside "target" dir
# then, you can call javah this way
javah -jni -d c -cp target HelloWorld

使用超级简单代码查看完整示例:

http://jnicookbook.owsiak.org/recipe-No-001/

与JNI玩得开心!