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

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

我的目标是构建一个 Java 类女巫实现一个从 C++ 调用的方法。此方法获取同一类中另一个 Java-Method 的名称。我想通过 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);
}

最佳答案

我不确定您是否可以将来自 jni 的字符串与等于 == 运算符进行比较。而不是

if (method == m.getName())

你应该试试

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

那里

关于通过 JNI/C++ 调用时未找到 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19031278/

相关文章:

c++ - 双循环变量 : unspecified or undefined? 的相等条件

java - 在 JUnit 中引用私有(private)类

java - 使用 ANT 编译 groovy 脚本时不支持 Major.minor 版本 51.0

java - Do-while 问题 java

java - BaseGame Util 无法解析为类型

c++ - 什么是 C++ 中的标记字符串?

c++ - 分配在 "stack"上的 vector 可以在函数之间传递吗?

c# - 如何从包含泛型参数的Type中获取 'basic'类型?

java - java反射中的ConfigurationBuilder、FilterBuilder、Scanners

java - 如何使用 Java SimpleDateFormat 正确格式化异常日期字符串?