网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Java核心代码例程之:SimpleAppl.
.您的Java代码安全吗?还是暴露在外.
.给你个比较全的关于时间的操作的.
.《敏捷Acegi、CAS:构建安全的Ja.
.在Spring程序中使用资源文件.
.Java:Web应用下实现定时任务的简.
.关于Hibernate开发框架中的各个包.
.外观设计模式组图(Fa?ade patte.
.JBuilder光标问题的解决方案.
.Java中的语句、分支和路径覆盖测.
.Java混淆器RetroGuard的使用方法.
.专家为您详解JAVA数据库基本操作.
.Java中文问题详解.
.[JAVA100例]044、多线程服务器:.
.面向对象思想之--理解类和对象.
.使用JBuilder2007开发Web应用程序.
.Merlin的魔力:用新的正则表达式.
.Effective Java读书笔记之四..
.控制对类内部数据或函数成员访问.
.Java与sqlserver2000的连接.

第一个JNI程序--HelloNative

发表日期:2008-1-5



  有各种各样的原因需要使用到已有的遗留代码。此时,使用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
上一篇:定时打开新窗口并关闭原窗口 人气:1170
下一篇:短路运算符:提高性能和简化代码 人气:614
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐