我想在pthread中调用java方法。
C ++方法从这样开始:
char* FileLoader::getStringFromFile(char* a_filename)
{
JNIEnv *env;
g_jvm->AttachCurrentThread (&env, NULL);
jclass cls = env->FindClass(JAVA_FILE_LOADER_CLASS);
...
g_jvm指向JavaVM对象。它是在应用程序以JNI_OnLoad()方法启动时设置的。
当调用“FindClass”时,它会抛出一个“noClassDefFoundError”但如果我在主线程中调用此方法,它会按预期工作。
我忘记了什么吗?
答案 0 :(得分:2)
好的,我用technomage的建议解决了这个问题:
在我的JNI_OnLoad()方法中:
jint JNI_OnLoad(JavaVM* vm, void * reserved)
{
JNITools::g_jvm = vm;
JNIEnv *env;
g_jvm->AttachCurrentThread (&env, NULL);jclass tmpClass = env->FindClass("com/Framework/IO/CFileLoader");
g_fileLoaderClass = (jclass)env->NewGlobalRef(tmpClass);
...
我的第一次测试失败了,因为我忘了打电话给NewGlobalRef()。
这doc帮助我理解了为什么需要它。