JNI 返回对象,Java调用native方法报NullPointerException,求大牛指教

Java调用native方法报错
Exception in thread "main" java.lang.NullPointerException
at com.company.jni.extract.SwExtract.extractSw(Native Method)

java:

class Result {
            private int errorCode;
            public Map<String, Integer> mapResult;
    }

public class SwExtract {
            public static native Result extractSw(String fileName, List<int[]> listPoints);

            public static void main(String[] args) {
                                //入参赋值
                                //XXXXX
                                Result cResult = extractSw(fileName, listPoints);
                }

}

JNI:

JNIEXPORT jobject JNICALL Java_com_company_jni_extract_SwExtract_extractSw
(JNIEnv * env, jclass jcls, jstring jstrFilePath, jobject jobLists)
{

    // 前面的处理逻辑已省略,tExtractResult结构数据可用
    jclass rstClass = env->FindClass("com/company/jni/extract/Result");  // 搜索类
    jmethodID initFunID = env->GetMethodID(rstClass, "<init>", "()V");   // 获取构造函数
    jobject objResult = env->NewObject(rstClass, initFunID);                // 创建一个类的实例

    jfieldID strId = env->GetFieldID(rstClass, "errorCode", "I");
    env->SetIntField(objResult, strId, nExtractRet);

    jfieldID clsMapId = env->GetFieldID(rstClass, "mapResult", "Ljava/util/Map;");
    jclass clsMap = env->FindClass("java/util/Map");
    jmethodID mapConstructMethod = env->GetMethodID(clsMap, "<init>", "()V");

    jobject objMap = env->NewObject(clsMap, mapConstructMethod, "");
    jmethodID hmapPutMethod = env->GetMethodID(clsMap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");

    for (size_t i = 0; i < n; i++)
    {
            int nWeight = tExtractResult->tExtractData[i].nWeight;

            env->CallObjectMethod(objMap, hmapPutMethod, env->NewStringUTF((char*)tExtractResult->tExtractData[i].szResult),nWeight);

}
    env->SetObjectField(objResult, clsMapId, objMap);

    env->DeleteLocalRef(objMap);  //删除局部引用

    return objResult;

}

空指针调用啊,就是你extractSw(fileName, listPoints);有参数为空指针
解决办法:方法1.检查调用这个native函数的地方,修改以确保有非空的对象作为参数传入
方法2.加保护,在这个函数外边加上if(xxx!= null && xxx != null) {extractSw(fileName, listPoints);}