随笔分类 -  java中的JNI

摘要:全局引用/局部引用/弱全局引用 java对象传到本地代码时会产生引用,这样就会产生垃圾回收问题 全局引用 Global Reference 跨越当前线程,在多个native中有效,需要手动释放 ReleaseGlobalRef函数释放 示例代码 jobject NewGlobalRef(jobject obj); void DeleteGlobalRef(jobject obj); 局部引用 Local Reference JNI返回的引用都是局部引用,只在native函数中有效 DeleteLocal Reference手动释放 示例代码 jobject NewLocalRef... 阅读全文
posted @ 2012-09-04 10:29 retacn_yue 阅读(177) 评论(0) 推荐(0)
摘要:处理数组 基本类型的数组 Get<TPYE> ArrayElements(<TYPE>Array arr,jboolean* isCopied); Release<TPYE> ArrayElements(<TYPE>Array arr,jboolean* isCopied); GetPrimitivArrayCritical(<jarray arr,jboolean* isCopied); Release<TPYE> ArrayElements(jarray arr,void* array,jboolean* isCopied) 阅读全文
posted @ 2012-09-04 10:29 retacn_yue 阅读(153) 评论(0) 推荐(0)
摘要:本地代码中创建java对象 //第二个参数为构造方法 jobject NewObject(jclass clazz, jmethodID methodID, ...) 示例代码(使用默认构造器创建对象): jclass clazz_date=ent->FindClass("java/util/Date"); jmethodID mid_date=env->GetMethodID(clazz_date,"<init>","()V"); jobject now=env->NewObject(clazz_dat 阅读全文
posted @ 2012-09-04 10:28 retacn_yue 阅读(193) 评论(0) 推荐(0)
摘要:访问java类中的属性和方法jfileID 属性jmethodID 方法JNIEnv 的函数GetFieldIDGetStaticFieldIDGetMethodIDGetStaticMethodID 示例代码 env_>GetMethodID(data_Clazz,"<int>","()V") 整体实例方法 java 代码 public class TestNative{public void function(int i){ System.out.printfln("integer:"+i); } public 阅读全文
posted @ 2012-09-04 10:27 retacn_yue 阅读(220) 评论(0) 推荐(0)
摘要:本地代码访问java代码JNIEnv类型实际上代表了java环境JNIEnv类中的常用函数 NewObjece NewString New<TYPE> Array Get/Set<TYPE> field Get/SetStatic<TYPE> field Call<TYPE> Method CallStatic<TYPE> Methodjobject 对象java的类型在c/c++中的映射关系 java c/c++ jni定义的别名 int long jint/jsizejclass的取得JNI.h 头文件中定义了jclass 表示j 阅读全文
posted @ 2012-09-04 10:26 retacn_yue 阅读(112) 评论(0) 推荐(0)
摘要:java 调用本地方法在java类中添加native方法使用javah 生成c/c++头文件 javah.exe 在jdk目录下的bin中 命令格式如下: javah 类的全路径 (workspace中的bin目录下)按照生成的头文件编写c/c++源文件 示例代码如下: #include "cn_yue_jni_TestNative.h"#include <iostream>using namespace std;JNIEXPORT void JNICALL Java_cn_yue_jni_TestNative_sayHello(JNIEnv * env, jo 阅读全文
posted @ 2012-09-04 10:25 retacn_yue 阅读(107) 评论(0) 推荐(0)