通过JNI / C ++调用时找不到Java方法

时间:2013-09-26 14:38:38

标签: java c++ reflection java-native-interface

我的目标是构建一个Java-Class,它实现了一个从C ++调用的方法。此方法在同一个类中获取另一个Java方法的名称。通过java-reflection API,我希望得到它的引用(稍后再调用它)。

但是从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);
}

1 个答案:

答案 0 :(得分:2)

我不确定你是否可以将jni中的字符串与equality ==运算符进行比较。而不是

if (method == m.getName())

你应该试试

if (m.getName().equals(method))

那里