在给定的代码中,你需要将方法 registerRopeRecogCallback
中的部分代码进行修改。下面是修改后的代码:
JNIEXPORT void JNICALL Java_com_iroad_yuedong_station_yolo_RknnWrapper_registerRopeRecogCallback(JNIEnv *env, jclass, jobject callbackObj) {
jclass callbackClass = env->GetObjectClass(callbackObj);
jmethodID ropeRecogMethodId = env->GetMethodID(callbackClass, "RopeRecogCallBackFunc", "([II)V");
jobject ropeRecogCallbackJobj = env->NewGlobalRef(callbackObj);
RKNNHandle_.SetRopeRecogCallbackFunc([](const int* ropeStatus, const int arraySize) {
JNIEnv* localEnv;
jint getEnvResult = gvm->AttachCurrentThread(reinterpret_cast<JNIEnv**>(&localEnv), nullptr);
if (getEnvResult == JNI_OK) {
jintArray statusArray = localEnv->NewIntArray(arraySize);
localEnv->SetIntArrayRegion(statusArray, 0, arraySize, ropeStatus);
localEnv->CallVoidMethod(ropeRecogCallbackJobj, ropeRecogMethodId, statusArray, arraySize);
localEnv->DeleteLocalRef(statusArray);
gvm->DetachCurrentThread();
}
});
}
这里主要有两个修改点:
- 将
ropeRecogmethodId
修改为ropeRecogMethodId
。 - 添加了创建和释放整型数组对象的相关代码。
此外,请确保在使用完全局引用 ropeRecogCallbackJobj
后,记得释放它:
env->DeleteGlobalRef(ropeRecogCallbackJobj);
希望这能帮助到你。如果还有其他问题,请随时提问。
内容由零声教学AI助手提供,问题来源于学员提问