Java 将字符串从c+;传递到jni CallObjectMethod+;

Java 将字符串从c+;传递到jni CallObjectMethod+;,java,c++,java-native-interface,Java,C++,Java Native Interface,我已经尽可能地缩小了我的问题范围,但已经陷入停顿。使用JNI,我试图调用C++中JOBJET实例的J方法,其中java实现将字符串作为参数。我的代码布局如下所示: jstring text = env->NewStringUTF("Text to parse") jclass Parser = getClass(env, "ParserClassPath"); //Invokes FindClass jmethodID parse = env->GetMethodID(Parser,

我已经尽可能地缩小了我的问题范围,但已经陷入停顿。使用JNI,我试图调用C++中JOBJET实例的J方法,其中java实现将字符串作为参数。我的代码布局如下所示:

jstring text = env->NewStringUTF("Text to parse")
jclass Parser = getClass(env, "ParserClassPath"); //Invokes FindClass
jmethodID parse = env->GetMethodID(Parser, "parse", "(Ljava/lang/String;)LPathToReturnClass;"
jobject ParserInstance = invokeObj(env, Parser); //Custom method returns class object after calling its constructor
jobject model = env->CallObjectMethod(ParserInstance, parse, text) // I believe problem is in this call
我认为问题在于jni.h中的CallObjectMethod。在调试时,在我进入CallObjectMethod之前,
text
具有某个内存位置的值,如
0x1ba4a238
。jni.h中的CallObjectMethod如下所示:

jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
        va_list args;
        jobject result;
        va_start(args,methodID);
        result = functions->CallObjectMethodV(this,obj,methodID,args); //Check args here
        va_end(args);
        return result;
    }
到达“Check args here”注释行后,在调试器中,args显示某个内存位置的值和一组随机字符
0x00d3fd7c“#&\@a1\2$”


我的问题是,这些字符应该是我传递的内存位置还是字符串?如果不是,我传递的参数是正确的还是需要使用其他类型的参数?我对代码中这一级别发生的事情没有真正的理解,因此如果有人能帮助我理解这个调用到底在做什么,那也会很有帮助。

不,你不应该期望看到你的地址。你的代码没问题。请看这里:(目前没有时间给出正确的答案)然后我不知道为什么我的callobjectmethod返回null。我确信这个字符串在直接从jar运行时可以工作,并且它返回正确的数据结构。找到我的类,找到类方法,初始化类对象并对其调用方法。我不知道为什么这不是从C++侧工作。使用调试器并在java方法中设置断点。可能有些东西不是你想象的那样。不,你不应该期望看到你的地址。你的代码没问题。请看这里:(目前没有时间给出正确的答案)然后我不知道为什么我的callobjectmethod返回null。我确信这个字符串在直接从jar运行时可以工作,并且它返回正确的数据结构。找到我的类,找到类方法,初始化类对象并对其调用方法。我不知道为什么这不是从C++侧工作。使用调试器并在java方法中设置断点。也许其他的东西不是你想象的那样。