现在的位置: 首页 > 综合 > 正文

JNI Hello World

2013年09月22日 ⁄ 综合 ⁄ 共 6496字 ⁄ 字号 评论关闭

 

一、Windows版本

1、创建工作目录JNIDemo。

2、编写包含本地方法的Java类JNIDemo.java。

    首先为Java的package在工作目录下创建文件夹层次结构test/jni/demo,在该子目录下创建Java源文件。

 

3、设置环境变量,为编译Java源文件和产生C代码头文件做准备,前提是要实现设置好JAVA_HOME和CLASSPATH环境变量,否则相应指定需要的绝对路径。

 

 

 4、编译Java源文件。

 

  1. javac test/jni/demo/JNIDemo.java  

 

5、产生C头文件。

 

  1. javah -jni -o jnidemo.h test.jni.demo.JNIDemo  

 

6、此时工作目录下将生成jnidemo.h文件,新建jnidemo.c文件实现该本地接口。

7、编译动态库,由于不想启动msdv,所以使用namke和cl.exe、link.exe解决它。

 

  1. F:/workshop/Test/JNIDemo>"D:/Program Files/Microsoft Visual Studio/VC98/Bin/VCVARS32.BAT"  

 

设置环境变量后编写makefile,内容如下。

 

之后顺序执行nmake javah、nmake all、nmake run即可见到jni接口执行效果,首先消息框显示java输入的参数,点击确定后控制台打印jni方法返回的字符串。

二、Linux版本

由于实现方式类似,仅编译工具和使用的API不同,过程不再赘述,仅给是文件内容、命令和运行效果。

1、创建工作目录。

2、Java源文件和windows版的一致,仅修改提示信息。

3、直接编写makefile搞定剩下的事。

4、产生头文件。

5、修改jnidemo.c。

6、编译并运行。

三、总结

别人说jni是双刃剑,使好了很有用处,否则带来一堆烦恼,正如c代码中标注的危险代码部分,如果Java方法输入的参数足够大,导致msg数组无法容纳,sprintf将引发问题,由于通常都是通过jvm启动并载入动态库本地方法,本地方法和jvm使用同一地址空间,本地方法crash将导致jvm奔溃直接退出,如果这种情况放生诸如WebLogic等追求很大稳定性的中间件之上,后果可想而知,所以这洪水能回避就尽量回避,除非本地接口简单得出错的几率都没有,又或者编写者非常神仙能把握好它。

 

抱歉!评论已关闭.