我的目標是構建一個Java類實現從C++調用的方法。此方法在同一個類中獲得另一個Java-Method的名稱。通過java-reflection API我想獲得對它的引用(稍後調用它)。通過JNI/C++調用時未找到Java方法
但是從C++調用的方法沒有找到其他的Java方法。如果它從java運行它工作正常。我錯過了什麼?
JAVA:
public void myCPlusPlusFunc(String method){ // I'll pass "noparam" in here
logMessage("Searching for method " + method + "....");
for (Method m : this.getClass().getMethods()) {
if (method == m.getName()) {
logMessage("Found it!"); // never found when called through JNI/C++
// (...) invoke the method etc...
}
}
}
public void noparam() {
logMessage("noparam got called");
}
C++
JNIEnv *env = theJVMLoader->getENV();
jmethodID m = env->GetMethodID(getBeanClass(), "myCPlusPlusFunc", "(Ljava/lang/String;)V");
if (env->ExceptionCheck()) {
handleException();
ASSERT(FALSE);
return FALSE;
}
ASSERT(m);
if (m)
{
// "noparam" is the method i expect to find
jstring s = env->NewStringUTF("noparam");
env->CallVoidMethod(getBeanInstance(), m, s);
}
也許有一個與你的方法有問題== m.getName()時,它從JNI調用。你應該在那裏嘗試m.getName()。equals(method)。我不知道如果從jni傳遞的字符串也可以與== –
進行比較,請從您的評論中回答問題! – Jakob