用NDK调用pthread中的java函数

时间:2012-10-09 14:35:54

标签: android android-ndk java-native-interface pthreads

我想在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”但如果我在主线程中调用此方法,它会按预期工作。

我忘记了什么吗?

1 个答案:

答案 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帮助我理解了为什么需要它。