在Windows 中实现 Java 本地方法.doc

在Windows 中实现 Java 本地方法.doc

ID:49535397

大小:236.00 KB

页数:15页

时间:2020-03-02

在Windows 中实现 Java 本地方法.doc_第1页
在Windows 中实现 Java 本地方法.doc_第2页
在Windows 中实现 Java 本地方法.doc_第3页
在Windows 中实现 Java 本地方法.doc_第4页
在Windows 中实现 Java 本地方法.doc_第5页
资源描述:

《在Windows 中实现 Java 本地方法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、本文为在32位Windows平台上实现Java本地方法提供了实用的示例、步骤和准则。这些示例包括传递和返回常用的数据类型。本文中的示例使用SunMicrosystems公司创建的JavaDevelopmentKit(JDK)版本1.1.6和Java本地接口(JNI)规范。用C语言编写的本地代码是用MicrosoftVisualC++编译器编译生成的。简介本文提供调用本地C代码的Java代码示例,包括传递和返回某些常用的数据类型。本地方法包含在特定于平台的可执行文件中。就本文中的示例而言,本地方法包含在Windows32位动态链接库(DLL)中。不过我要

2、提醒您,对Java外部的调用通常不能移植到其他平台上,在applet中还可能引发安全异常。实现本地代码将使您的Java应用程序无法通过100%纯Java测试。但是,如果必须执行本地调用,则要考虑几个准则:1.将您的所有本地方法都封装在单个类中,这个类调用单个DLL。对于每种目标操作系统,都可以用特定于适当平台的版本替换这个DLL。这样就可以将本地代码的影响减至最小,并有助于将以后所需的移植问题包含在内。2.本地方法要简单。尽量将您的DLL对任何第三方(包括Microsoft)运行时DLL的依赖减到最小。使您的本地方法尽量独立,以将加载您的DLL和应用程

3、序所需的开销减到最小。如果需要运行时DLL,必须随应用程序一起提供它们。Java调用C对于调用C函数的Java方法,必须在Java类中声明一个本地方法。在本部分的所有示例中,我们将创建一个名为MyNative的类,并逐步在其中加入新的功能。这强调了一种思想,即将本地方法集中在单个类中,以便将以后所需的移植工作减到最少。示例1--传递参数在第一个示例中,我们将三个常用参数类型传递给本地函数:String、int和boolean。本例说明在本地C代码中如何引用这些参数。publicclassMyNative{publicvoidshowParms(Stri

4、ngs,inti,booleanb){showParms0(s,i,b);}privatenativevoidshowParms0(Strings,inti,booleanb);static{System.loadLibrary("MyNative");}}请注意,本地方法被声明为专用的,并创建了一个包装方法用于公用目的。这进一步将本地方法同代码的其余部分隔离开来,从而允许针对所需的平台对它进行优化。static子句加载包含本地方法实现的DLL。下一步是生成C代码来实现showParms0方法。此方法的C函数原型是通过对.class文件使用javah实

5、用程序来创建的,而.class文件是通过编译MyNative.java文件生成的。这个实用程序可在JDK中找到。下面是javah的用法:javacMyNative.java(将.java编译为.class)javah-jniMyNative(生成.h文件)这将生成一个MyNative.h文件,其中包含一个本地方法原型,如下所示:/**Class:MyNative*Method:showParms0*Signature:(Ljava/lang/String;IZ)V*/JNIEXPORTvoidJNICALLJava_MyNative_showParms

6、0(JNIEnv*,jobject,jstring,jint,jboolean);第一个参数是调用JNI方法时使用的JNIEnvironment指针。第二个参数是指向在此Java代码中实例化的Java对象MyNative的一个句柄。其他参数是方法本身的参数。请注意,MyNative.h包括头文件jni.h。jni.h包含JNIAPI和变量类型(包括jobject、jstring、jint、jboolean,等等)的原型和其他声明。本地方法是在文件MyNative.c中用C语言实现的:#include#include"MyNative.

7、h"JNIEXPORTvoidJNICALLJava_MyNative_showParms0(JNIEnv*env,jobjectobj,jstrings,jinti,jbooleanb){constchar*szStr=(*env)->GetStringUTFChars(env,s,0);printf("String=[%s]",szStr);printf("int=%d",i);printf("boolean=%s",(b==JNI_TRUE?"true":"false"));(*env)->ReleaseStringUTFChars(

8、env,s,szStr);}JNIAPI,GetStringUTFChars,用来根据Java

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。