2

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」がスローされますが、メインスレッドでこのメソッドを呼び出すと、期待どおりに機能します。

何か忘れましたか?

4

1 に答える 1

2

わかりました、私は技術のアドバイスで問題を解決します:

私の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()を呼び出すのを忘れたため、最初のテストは失敗しました。

このドキュメントは、なぜそれが必要なのかを理解するのに役立ちました。

于 2012-10-11T15:09:49.410 に答える