我一直坚持这一点,我需要从c/C++调用Java函数。如何从c调用Java函数
在示例和教程中,我只看到一个调用c方法的java应用程序,并且在调用另一个java方法的同一方法中,但我想要做的是从代码的任何部分调用java方法。这是我有:
static JNIEnv mEnv;
static jclass mClassAndroidActivity;
static mMethodSayHello;
JNIEXPORT void JNICALL JNI_FUNCTION(AndroidActivity_nativeInit)(JNIEnv* env, jobject obj, int width, int height)
{
mEnv = env;
jclass cls = (*env)->GetObjectClass(env, obj);
mClassAndroidActivity = (*env)->NewGlobalRef(env, cls);
mMethodSayHello = (*env)->GetMethodID (env, mClassAndroidActivity, "SayHello", "(Ljava/lang/String;)V");
}
//this method is called from a cpp
void nativeSayHello(char* msg)
{
jstring string = (*mEnv)->NewStringUTF(mEnv, msg);
(*mEnv)->CallVoidMethod(mEnv, mClassAndroidActivity, mMethodSayHello, string);
}
但总是崩溃,我已经试过没有NewGlobalRef,使用而不是在JNI_Function ENV MENV,我试着从JNI_OnLoad获得方法ID,但老是死机。
这是日志我得到:
02-15 18:09:48.520:W/dalvikvm(27904):JNI警告:从主题ID = 0
'我得到的“最佳”日志说,从线程1的env是不同于线程0'我相信这是正确的。每个Java线程应该有不同的env指针。 – Yourpalal 2012-02-16 01:25:59
是的,但我怎么能保存第一个env指针,所以我可以用在不同的线程 – 2012-02-16 01:31:12