我一直堅持這一點,我需要從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