我正在编写一个代码,它必须使用 JNI 从 C 返回一个长数组到 java。但是无论我尝试什么,方法 (*env)->FindClass 都会返回 NULL。
这是我的代码:
// Returns a 2D long array from C to Java
JNIEXPORT jobjectArray JNICALL Java_awax_tools_AcquisitionWrapper_startAcquisition (JNIEnv *env, jobject obj) {
// (...) Acquisition code
// The 2D long array to return
long** primitive2DArray = data;
// Get the long array class
jclass longArrayClass = (*env)->FindClass(env, "[java/lang/Long");
// Check if we properly got the long array class
if (longArrayClass == NULL) {
// Ooops
return NULL;
}
// Create the returnable 2D array
jobjectArray myReturnable2DArray = (*env)->NewObjectArray(env, (jsize) length1D, longArrayClass, NULL);
// Go through the firs dimension and add the second dimension arrays
for (unsigned int i = 0; i < length1D; i++) {
jlongArray longArray = (*env)->NewLongArray(env, length2D);
(*env)->SetLongArrayRegion(env, longArray, (jsize) 0, (jsize) length2D, (jlong*) primitive2DArray[i]);
(*env)->SetObjectArrayElement(env, myReturnable2DArray, (jsize) i, longArray);
(*env)->DeleteLocalRef(env, longArray);
}
// Return a Java consumable 2D long array
return myReturnable2DArray;
}
我也尝试过:
(*env)->FindClass(env, "[L")
(*env)->FindClass(env, "[Long")
(*env)->FindClass(env, "[java.lang.Long")
但它们似乎都不起作用。