jni实例一

来源:互联网 发布:买卖域名好赚吗 编辑:程序博客网 时间:2024/06/03 20:26

1。编写一个java程序,包含一个native函数。

 

package cn.vicky.jni;/** * * @author Vicky.H */public class HelloWorld {    // 1.need a native method    public native void sayHello();    }


2。编译该java程序。

[root@localhost src]# tree
.
`-- cn
    `-- vicky
        `-- jni
            `-- HelloWorld.java

3 directories, 1 file
[root@localhost src]# javac cn/vicky/jni/HelloWorld.java
[root@localhost src]# tree
.
`-- cn
    `-- vicky
        `-- jni
            |-- HelloWorld.class
            `-- HelloWorld.java

3 directories, 2 files
[root@localhost src]# javah cn.vicky.jni.HelloWorld
[root@localhost src]# tree
.
|-- cn
|   `-- vicky
|       `-- jni
|           |-- HelloWorld.class
|           `-- HelloWorld.java
`-- cn_vicky_jni_HelloWorld.h

3 directories, 3 files

如以上操作,将会生成一个对应的C/C++头文件。

 

3。编写C/C++动态文件库。

这里依旧使用netbeans+centos编写.so格式的动态文件库。工程目录如下:

其中cn_vicky_jni_HelloWorld.h为javah命令生成的头文件。jni.h以及jni_md.h为:

[root@localhost src]# cd /usr/java/default/include/
[root@localhost include]# tree
.
|-- classfile_constants.h
|-- jawt.h
|-- jdwpTransport.h
|-- jni.h
|-- jvmti.h
`-- linux
    |-- jawt_md.h
    `-- jni_md.h

1 directory, 7 files

拷贝对应的文件获得。

编写头文件的实现:cn_vicky_jni_HelloWorld_impl.cpp

#include "cn_vicky_jni_HelloWorld.h"#include <iostream>using namespace std;JNIEXPORT void JNICALL Java_cn_vicky_jni_HelloWorld_sayHello (JNIEnv *env, jobject obj){    cout << "hello world" << endl;}


是一个简单的,输出“hello world”的程序。生成程序:获得libjni_01_cpp.so的动态链接库。为了只用该动态链接库,我们需要将其复制到/usr/lib文件下。

 

4。java调用libjni_01_cpp.so

继续编写HelloWorld.java程序

package cn.vicky.jni;/** * * @author Vicky.H */public class HelloWorld {    // 1.need a native method    public native void sayHello();        public static void main(String[] args) {        System.loadLibrary("jni_01_cpp");        new HelloWorld().sayHello();    }}


 

[vicky@localhost src]$ javac cn/vicky/jni/HelloWorld.java
[vicky@localhost src]$ tree
.
|-- cn
|   `-- vicky
|       `-- jni
|           |-- HelloWorld.class
|           `-- HelloWorld.java
`-- cn_vicky_jni_HelloWorld.h

3 directories, 3 files
[vicky@localhost src]$ java cn.vicky.jni.HelloWorld
hello world

程序执行,完成。删除测试使用的动态链接库:

[root@localhost src]# rm /usr/lib/libjni_01_cpp.so
rm:是否删除 一般文件 “/usr/lib/libjni_01_cpp.so”? y

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

以上为linux下的jni使用,至于windows下,大体相同,当生成jni_01_cpp.dll文件后,我们需要将jni_01_cpp.dll所在目录的地址,宝贝到windows环境的path下。如:

然后,使用运行HelloWorld程序。


 

原创粉丝点击