2013-02-21 110 views
1

我需要调用本地方法一样,本机方法:如何调用与 '空' 参数

java代码:

private native Object SendFiles(String strEmail, DeviceInfo info, String [] arrFiles, int cntFiles, ID idRequest); 

调用SendFiles();

SendFiles(strEmail, null, arrFiles, cntFiles, requestID); 

和C++代码:

jobject Java_com_xxxxx_xxxxx_controller_CoreController_SendFiles(JNIEnv *pEnv, jobject obj, jstring strEmail, jobject jinfo, jobjectArray jarrFiles, jint cntFiles, jobject jidRequest){ 
     ......... 

      if(jinfo == NULL)  // here crashes !!!!!!! 
      doSomething(); 

     ............ 
} 

Java的 '空' 可以被发送到c 'NULL'?

我该怎么做?

+1

是否真的存在它崩溃的地方,或者你在其他地方访问jinfo?对我来说,doSomething似乎只在jinfo不可用时才被处理,但我没有看到任何机制来避免执行其他代码? – junix 2013-02-21 21:49:00

回答

0

您可以在C++ NULL检查多个职位,如Checking for a null object in C++Checking if this is nullHow do we check if a pointer is NULL pointer?

但是这个帖子似乎给了最直接的办法读了起来: Return a "NULL" object if search result not found

+0

至少在JDK 1.7中,它仍然没有解释行为'jobject'被定义为'typedef _jobject * jobject;'所以它不是通过引用调用,而是通过指针调用。指针应该可以检查为NULL还是出错了? – junix 2013-02-21 21:46:17

0

jobject是一个指针数据类型在C++端。当您从Java传递一个null对象时,C++将其作为NULL指针接收。可以比较。

崩溃可能与其他事情有关。插入一些诊断输出和调试。