作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用枚举模式在我的应用程序中定义一个单例。我需要访问这个单例的方法,但我似乎无法正确传递单例。
我试过像这样传递枚举并创建一个 jobject 作为 globalRef:
class FrameElapsedListener : public gkEngine::Listener{
public:
JNIEnv* env;
jobject entityManager;
FrameElapsedListener(JNIEnv* env, jobject entityManager) :
env(env),
entityManager(env->NewGlobalRef(entityManager)){}
~FrameElapsedListener(){
env->DeleteGlobalRef(entityManager);
}
void tick(gkScalar rate);
};
但是我在使用它时遇到了崩溃,因为“本地引用”超出了这样的范围:
jclass entityManagerClass = env->FindClass(entityManagerClassPath.c_str());
jmethodID entityManagerFrameElapsedMethodId = env->GetMethodID(entityManagerClass, "frameElapsed", "(F)V");
env->CallVoidMethod(entityManager, entityManagerFrameElapsedMethodId, rate); //crashes here
现在我正试图从枚举中取出单例,但我不确定如何像那样获取枚举值。有什么建议吗?
最佳答案
您不能保存 JNIEnv 指针以供在不同的线程中使用。您必须通过调用 AttachCurrentThread() 在线程中获得一个新线程。
关于java - 如何通过 JNI 将 Java 枚举暴露给 native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17219580/
我是一名优秀的程序员,十分优秀!