2013-07-06 51 views
3

我對JNI相當陌生,而且我正在努力解決這個問題。JNI:無法從回調中的本機方法中找到java類

我有一個C++回調被網絡庫(alljoyn)調用。

在這個回調中,我需要調用Java代碼。

由於這個回調是在另一個線程,我用下面的代碼來獲得JNIEnv指針的指針:

(JVM是一個全球性的指針)

JNIEnv *env = NULL; 
jvm->AttachCurrentThread(&env, NULL); 

問題是,當我嘗試調用的findClass用這個env指針,結果是NULL。

如果我在主線程中執行完全相同的FindClass調用,則一切正常。

我該如何解決這個問題?這是否與類路徑有關?

+1

[Android JNI中任何線程的FindClass可能的重複]( http://stackoverflow.com/questions/13263340/findclass-from-any-thread-in-android-jni) –

回答

2

答案和官方解決方法可在developer.android上找到。如果您必須超出您的本地代碼可能需要的所有類的預緩存全局引用,您會發現一個成功的解決方案,可在此處緩存正確的類加載器:FindClass from any thread in Android JNI

+0

我不得不緩存jclass/jobj和memthodID,但它的工作原理。仍然是一個醜陋的黑客。 – Intrepidd