我正在使用枚舉模式在我的應用程序中定義單例。我需要訪問這個單例的方法,但我似乎無法正確傳遞單例。如何通過JNI將Java枚舉暴露給本機代碼
我試圖通過枚舉和創建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
現在我想剛剛得到的單出枚舉,但我不知道如何抓住這樣的枚舉值。有什麼建議?
某些錯誤一般會幫助檢查。但是,特別是,GetMethodID的返回值是什麼,它是否會拋出一個Java異常(使用'ExceptionCheck'進行檢查並使用'ExceptionDescribe'進行調試)。 –