初识JNI
来源:互联网 发布:sql 遍历查询结果 编辑:程序博客网 时间:2024/05/02 18:30
前几天很高兴有机会在讲台上讲JNI的知识,虽然网上有很多关于JNI的知识,但只有自己动手去做了,才能感受到它的魅力所在。现在我将自己掌握的知识跟大家分享:
一.jni介绍
• JNI( Java Native Interface)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现.
• 标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的
• 你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的
• 程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们
二.使用步骤:
1.编写java类,在类中声明一个native关键字的方法。
如:public native void say();
2.将java类编译成字节码文件(*.class)
3.使用javah命令生成包含native方法定义的c/c++头文件
4.在VC++中新建一个DLL工程,在工程中添加三个c头文件:jni.h, jni_md.h, 和上面生成的头文件。按照生成的c/c++头文件来写c/c++源 文 件
5.编译源文件,生成DLL文件
6.把dll放入java工程中,采用System.loadLibrary()方法,调用该DLL
三.一个简单的例子:
1.编写java代码
我们在硬盘上建立一个hello工程作为我们的工作目录,新建一个pack包,在包下面建Test类。首先我们需要编写自己的java代码在java代码中我们会声明native方法,代码非常简单。如下所示
class Test
{
public native void getResult(int x,int y);
public static void main(String[] args) {
}
}
2.保存该类,就在工程的bin目录下生成了pack.Test.class文件
3.使用javah命令:javah pack.Test
生成c头文件:pack_Test .h
声明的方法为:
JNIEXPORT void JNICALL Java_pack_Test _getResult (JNIEnv *, jobject,jint,jint);
4.新建win32 DLL工程mydll,添加三个头文件后,写代码实现方法
#include<stdio.h>
#include”pack_HelloWorld.h”
JNIEXPORT void JNICALL Java_pack_Test_getResult(JNIEnv * env, jobject o,jint x,jint y)
{
return(x+y);
}
5.编译,然后按F7生成DLL文件,在mydll工程debug文件夹中有mydll.dll
6.将mydll.dll复制到java工程根目录下,再在HelloWorld类中调用该DLL
class HelloWorld
{
public native int getResult(int x,int y);
public static void main(String[] args) {
System.loadLibrary(“mydll”);
Test h=new Test ();
System.out.println( h.getResult(3,5));
}
}
运行程序,结果为: 8
- 初识JNI
- 初识JNI
- 初识Jni
- 初识JNI
- JNI初识
- JNI(一):初识JNI
- java jni初识
- 初识JNI(一)
- AndroidStudio Jni 开发初识
- Android 初识JNI(一)
- Android 初识JNI(一)
- Java之_初识JNI
- 初识JNI (ubuntu 12.04 +java 7)
- 初识JNI之-Android Ndk环境搭建
- 初识JNI之-编写第一个HelloJNI
- Android初识JNI-搭建NDK开发环境
- 初识JNI(二)-静态注册和动态注册
- android NDK 教程一(初识JNI--hello world)
- 希望准备出国的学生们有个心理准备
- 角色访问控制(RBAC)
- 解决MyEclipse6.5联网编辑JSP页面出现提示信息的时候的死机、假死等问题的办法
- 你准备好了吗?
- 像各位请教
- 初识JNI
- Date and Time in ADF
- 研究生 课程 软件测试
- PhD第三月
- 终于找到IBM JCOP tooks3.1.1.b(中国是很难找的到哦?!现在加破解方法)
- BUILD工具的操作过程
- 眼下售楼新骗局
- C语言中的头文件可以自己写吗?
- 环境变量