jni 线程内反调java方法
在c的线程中反向访问java的对象
在做项目的时候遇到这样一个问题:
在c中的线程中,通过
jclass managerCls = (*env)->FindClass(env, “com/test/fact/Manager”);
总是会崩溃,后来发现不能在线程中去Find class(但是可以访问到系统的类, 比如说String 类)
解决方案:
需要在主线程中初始化:
jclass managerCls = (*env)->FindClass(env, “com/test/fact/Manager”);
之后将managerCls 创建出来全局引用
devmgr_cls = (*jni_env)->NewGlobalRef(jni_env, managerCls);
之后在线程中用devmgr_cls即可
当线程退出勿忘将全局引用delet掉
(*jni_env)->DeleteGlobalRef(jni_env, devmgr_cls);