首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JNI和pthread

JNI和pthread
EN

Stack Overflow用户
提问于 2012-04-24 06:02:47
回答 1查看 821关注 0票数 1

我要调用JNI_OnLoad在本地保存一个JavaVM*:

代码语言:javascript
运行
AI代码解释
复制
             JavaVM * and_jvm = NULL;
             jint JNI_OnLoad(JavaVM* vm, void* reserved)
             {
                   and_jvm = vm;
                   return JNI_VERSION_1_6;
             }

当我开始我的线程时,我调用

代码语言:javascript
运行
AI代码解释
复制
             void * thread_f (void * v)
             {
             jint attachResult = and_jvm->AttachCurrentThread(&env,NULL);
             //The attachResult is 0.
             jclass my_class= (jclass)env->NewGlobalRef(env->FindClass("my/package/com/MyClass"));
             //my_class is 0
             if (my_class == 0)
                  return NULL;
             }

如果我在线程外调用NewGlobalRef,它将返回一个有效的对象。怎么啦?

10xs,Nahum

EN

回答 1

Stack Overflow用户

发布于 2013-11-12 17:31:18

问题不在于NewGlobalRef,而在于FindClass

最好在JNI_OnLoad中执行所有的FindClass调用。这是因为类加载器的一些问题...当您在新线程上时,将使用不同的类加载器,这就是找不到该类的原因。

实际上,您可以将my_class设置为全局的,在JNI_OnLoad中创建GlobalRef并在程序中的任何位置使用它,而不会出现问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10292507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文