虚拟机接口指针和对象全局引用
static JavaVM * jvm = NULL;
static jobject jobj = NULL;
缓存Java虚拟机接口指针
jint JNI_OnLoad(JavaVM * jvm,void * reserved)
{
jvm = jvm;
return JNI_VERSION_1_4;
}
创建一个全局引用
/**
* 初始化全局引用
*/
void nativeInit(JNIEnv * env,jobject obj)
{
if(NULL == jobj)
{
jobj = (* env)->NewGlobalRef(env,obj);
if(NULL==jobj)
{
return ;
}
}
}
删除全局引用
/**
* 释放全局引用
*/
void nativeFree(JNIEnv * env,jobject obj)
{
if(NULL != jobj)
{
(* env)->DeleteGlobalRef(env,jobj);
jobj = NULL;
}
}
将当前线程附加到Java虚拟机上
void * worker(void *args)
{
int init = 0;
JNIEnv * env;
//附加线程
if((* jvm)->AttachCurrentThread(jvm,&env,NULL)){
return NULL;
}
/
//剥离线程
(* jvm)->DetachCurrentThread(jvm);
return NULL;
}
创建新线程
pthread_t pthread;
pthread_create(&pthread,NULL,worker,NULL);