JNI Hello World

 一、Windows版本

1、创建工作目录JNIDemo。

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

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

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

 4、编译Java源文件。

5、产生C头文件。

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

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

设置环境变量后编写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等追求很大稳定性的中间件之上,后果可想而知,所以这洪水能回避就尽量回避,除非本地接口简单得出错的几率都没有,又或者编写者非常神仙能把握好它。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值