JNI实践小结,jni小结
分享于 点击 32106 次 点评:163
JNI实践小结,jni小结
- 概念
- 应用场景
- 原理
暂时没仔细研究原理。所以在此不好信口开河。
大致可以理解为,当调用native方法的时候JVM可以通过JNI调用本地方法的相应实现。
- 使用步骤
- Demo
编写java源文件Demo.java
package com.jiakai;
public class Demo {
static {
System.loadLibrary("test"); //加载相应动态库
}
public native void hello();
public static void main(String[] args) {
new Demo().hello();
}
}
编译javac -d . Demo.java 生成Demo.class文件和相应目录结构 javah -jni com.jiakai.Demo 生成com_jiakai_Demo.h头文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jiakai_Demo */
#ifndef _Included_com_jiakai_Demo
#define _Included_com_jiakai_Demo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jiakai_Demo
* Method: hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_jiakai_Demo_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
实现本地方法 com_jiakai_Demo.cpp文件
#include "com_jiakai_Demo.h"
JNIEXPORT void JNICALL Java_com_jiakai_Demo_hello
(JNIEnv * env, jobject obj) {
printf("Hello Jni\n");
return;
};
通过VC编译生成动态库 在此我不得不吐槽下,对于我这个不熟悉VC和动态库的人。遇见了各种各样的由于路径引起Cannot Find的错误。 即使,用了很多网上别人的解决方法也不好使。后来自己用了一个办法解决了。
说说动态库文件的生成。 vc6.0建立一个Win32 Dynamic-Link Libray项目 注意:此处项目名称必须要与上文中load的动态库名一致. 在FileView视图下,把com_jiakai_Demo.h文件导入到Header Files目录下,把com_jiakai_Demo.cpp文件导入到Source Files目录下。 编译运行生成test.dll动态库文件。
在上面生成动态库的过程中,可能会遇到这样的错误 Cannot open include file:jni 我的方法是把jdk include 目录 和 jdk include/win32 目录下所有的.h文件复制到VC98下的iclude目录下。 这样便解决了这个问题。
下一步把test.dll文件放到相应位置就行(classpath能找到就行 这样load的时候才能找到)。 运行java类 java com.jiakai.Demo
结果: Hello Jni
相关文章
- 暂无相关文章
用户点评