网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  第一个jni程序--hellonative     
  文章作者:未知  文章来源:水木森林  
  查看:96次  录入:管理员--2007-11-17  
 
  有各种各样的原因需要使用到已有的遗留代码。此时,使用jni,可以非常方便地调用已有的稳定的本地代码。把遗留系统和新的代码整合起来。下面我们来看如何写一个本地c代码调用的hello world版本。

在本实例中,包括下面几个类:
hellonative.java:实用类,提供一个静态本地方法greeting(),打印出一个消息串。其中greeting方法调用了下面的本地代码。
hellonative.c:本地实现代码。
hellonativetest.java:应用主文件,调用hellonative实用类的greeting()方法。
hellonative.java

//hellonative.javaclass hellonative{ public native static void greeting(); static { //hellonative是下面将由hellonative.c生成的dll文件。system.loadlibrary("hellonative"); }};

编译上面的.java文件后,在生成的.class目录下,使用javah命令生成hellonative.class的c头文件:
javah hellonative
hellonative.h

生成的hellonative.h文件如下:

/* do not edit this file - it is machine generated */#include <jni.h>/* header for class hellonative */#ifndef _included_hellonative#define _included_hellonative#ifdef __cplusplusextern "c" {#endif/* * class: hellonative * method: greeting * signature: ()v */jniexport void jnicall java_hellonative_greeting (jnienv *, jclass);#ifdef __cplusplus}#endif#endif
hellonative.c
拷贝生成的hellonative.h,另存为hellonative.c,并填充jnicall java_hellonative_greeting方法体,得到下面的
hellonative.c:/* do not edit this file - it is machine generated */#include <jni.h>/* header for class hellonative */#ifndef _included_hellonative#define _included_hellonative#ifdef __cplusplusextern "c" {#endif/* * class: hellonative * method: greeting * signature: ()v */jniexport void jnicall java_hellonative_greeting (jnienv * env, jclass cl){ printf("hello, native world!");}#ifdef __cplusplus }#endif#endif
使用windows自带的c/c++编译器,编译上面的hellonative.c:

cl -id:j2sdk1.4.1include -id:j2sdk1.4.1includewin32 -ld hellonative.c -fehellonative.dll

执行这条命令后将生成hellonative.dll文件。这个dll动态链接库就是下面我们在hellonative.java文件中调用的本地文件。如果是在unix/linux下,请使用相应操作系统的c编译器,生成的库文件是hellonative.so。
开始运行吧

至此,我们编写的windows平台上的本地库文件和java文件已经准备就绪,下面写一个简单的测试程序来测试一下本地调用吧。

class hellonativetest { public static void main(string[] args) { hellonative.greeting(); }}
编译、运行这个程序,将打印出native版的:
hello, native world!

也许你认为这并没有什么特别,但如果你知道这个消息串是使用你自己写的c库文件中调用生成的时候,你就会有知道这有着非常重大的意义。就好像寻宝者在人迹罕至的荒山之中,突然看到一块史前陶片,陶片本身并没有什么特别,但这,也许已经为你启开了宝藏之门。

from-javaresearch
 
 
上一篇: 当主线程崩溃而其它线程继续运行时发生什么?    下一篇: 定时打开新窗口并关闭原窗口
  相关文档
java 中protected modifier 使用总结 11-17
SpringSide推荐的JDK5.0 feature 08-06
java security notes (6) 11-17
制作可执行的jar文件包及jar命令详解zt 11-27
实现java程序跨平台运行十二个注意事项 11-16
java入门笔记4_访问控制和包 11-17
java二进制兼容规则:方法 11-17
(9)midp api 11-17
由http暗藏通道看网络安全 11-17
如何在web应用中启动后台任务 11-17
java通过jacob调用word 11-17
java applet编程之声音和图像的协调 11-17
在java中利用jcom实现仿excel编程详解 11-17
why i get solaris certification? 11-17
chinasourcing借国际会展打造国家公共品牌 05-08
一个jdbc订购系统原型 11-17
在组合模式中实现访问者(visitor)模式 11-17
java和以网络为核心的未来 11-17
struts的静态数据验证方法 11-17
接口和抽象类的定义方式举例说明 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息