JNI CallStaticObjectMethod在c++中返回NULL
JNI CallStaticObjectMethod return NULL in c++
这是c++中的代码,我在这里创建了一个Java VM,我需要从jar中调用一个函数。
JavaVM *jvm; /* denotes a Java VM */
JNIEnv *env; /* pointer to native method interface */
JavaVMInitArgs vm_args; /* JDK/JRE 6 VM initialization arguments */
jmethodID constr = NULL;
jmethodID Read_XML = NULL;
JavaVMOption* options = new JavaVMOption[1];
options[0].optionString = "-Djava.class.path=<path_to_my_jar>";
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 1;
vm_args.options = options;
vm_args.ignoreUnrecognized = JNI_TRUE;
/* load and initialize a Java VM, return a JNI interface
* pointer in env */
long status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (status == JNI_ERR){
cout << "Fail: Unable to load JVM t Exit" << endl;
}
jclass xml_read = env->FindClass("<MyClass>");
if (env->ExceptionCheck()){
cout << "Fail:";
}
constr = env->GetMethodID(xml_read, "<init>", "()V");
if (env->ExceptionCheck()){
cout << "Fail:";
}
Read_XML = env->GetStaticMethodID(xml_read,"readFromXML", "(Ljava/lang/String;)L<MyClass>;");
if (env->ExceptionCheck()){
cout << "Fail:";
}
const char* filepath = "<My_filepath>";
const jstring file = env->NewStringUTF(filepath);
jobject ret_obj = env->CallStaticObjectMethod(xml_read,Read_XML,file);
if (env->ExceptionCheck()){
cout << "Fail:";
}
现在ret_obj为NULL。我正在调用的Java函数以String作为参数,并返回来自另一个不同于MyClass的类的对象。
Java方法是这样的public static SomeClass readFromXML(String filepath)
更新1 在CallStaticObjectMethod中我们有这个jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
...) {
va_list args;
jobject result;
va_start(args,methodID);
result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
va_end(args);
return result;
}
在va_start(args,methodID);
之后,args的值类似于0x002cf5fc "0¦ύ"
所以也许这些论点是有道理的?
这个问题解决了。这是我的错,在filepath中我也应该定义XML文件,而不仅仅是包含此文件的文件。谢谢你
相关文章:
- 如何在映射中返回null
- 为什么返回 NULL 不会破坏函数?
- fopen 在 gdb 中返回 NULL
- 为什么要从main()返回NULL?
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- Box2D World.GetBodyList() 返回 NULL,但 World 显然正在更新对象
- boost::p ython:PyErr_Fetch始终返回 NULL 回溯
- 如何在 Visual C++ 中从返回类型为 map 的函数返回 null?
- 如何在C++中返回Null作为引用
- 从模板化函数返回Null对象
- GDALOpen 在 GEOTiff 文件上返回 null
- PyThreadState_GET() 从 PyImport_GetModuleDict() 中返回 NULL
- (位图)LoadImage() 返回 NULL,GetLastError() 返回 0
- 在构造函数处将类对象强制转换为接口始终返回 NULL
- 如何为迭代器返回"null"值?
- 具有 4 个指针的节点的递归插入函数返回 null
- winAPI FindResource 仅在 DLL 中返回 NULL
- 使用 dlopen/dlsym 打开C++共享库 - dlsym 返回 NULL
- SetWindowsHookEx 在挂接到其他线程时返回 NULL
- 尚未归shared_ptr所有的实例的 shared_from_this() 总是返回 null?