Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从jni返回并填充jintArray 我试图从C++到java返回一个金标,但是不管我做什么,调用都保持挂起,代码就停止了。即使是像这样简单的事情 JNIEXPORT jintArray JNICALL Java_main_getIntArray(JNIEnv *env, jclass c) { jintArray intArray = env->NewIntArray(5); jint values[5] = {69, 69, 69, 69, 69}; env->SetIntArrayRegion(intArray, 0, 5, values); env->ReleaseIntArrayElements(intArray, values, NULL); return intArray; }_C++_Arrays_Java Native Interface_Jint - Fatal编程技术网

从jni返回并填充jintArray 我试图从C++到java返回一个金标,但是不管我做什么,调用都保持挂起,代码就停止了。即使是像这样简单的事情 JNIEXPORT jintArray JNICALL Java_main_getIntArray(JNIEnv *env, jclass c) { jintArray intArray = env->NewIntArray(5); jint values[5] = {69, 69, 69, 69, 69}; env->SetIntArrayRegion(intArray, 0, 5, values); env->ReleaseIntArrayElements(intArray, values, NULL); return intArray; }

从jni返回并填充jintArray 我试图从C++到java返回一个金标,但是不管我做什么,调用都保持挂起,代码就停止了。即使是像这样简单的事情 JNIEXPORT jintArray JNICALL Java_main_getIntArray(JNIEnv *env, jclass c) { jintArray intArray = env->NewIntArray(5); jint values[5] = {69, 69, 69, 69, 69}; env->SetIntArrayRegion(intArray, 0, 5, values); env->ReleaseIntArrayElements(intArray, values, NULL); return intArray; },c++,arrays,java-native-interface,jint,C++,Arrays,Java Native Interface,Jint,在java中,我正在做 System.out.println("Start getting array"); System.out.println("Array: " + Arrays.toString(getIntArray())); System.out.println("Done getting array"); 但我得到的唯一结果是 开始获取数组 我做错什么了吗 我尝试从值[]创建指针,并在SetIntArrayRegion中使用该指针 我试图通过循环来填充数组 我试着移除释放装置

在java中,我正在做

System.out.println("Start getting array");
System.out.println("Array: " + Arrays.toString(getIntArray()));
System.out.println("Done getting array");
但我得到的唯一结果是

开始获取数组

我做错什么了吗

  • 我尝试从值[]创建指针,并在SetIntArrayRegion中使用该指针

  • 我试图通过循环来填充数组

  • 我试着移除释放装置


releaseintarayelements
不应该在那里,因为您没有调用
GetIntArrayElements
。为了清楚起见,因为您的代码没有显示它:您的函数不知何故被包装在
外部“C”
中?(我想是的,或者你应该得到一个
unsatifiedlinkerror
或者类似的东西)@zenzelezz:是的,头文件被包装成一个外部“C”。即使没有先挂起应用程序的ReleaseIntArrayElements,也要检查是否调用了本机方法。开始注释它的所有主体,返回null。然后,一次取消一行内容的注释。也许,你可以添加一些PrTrF来检查在原生方法中发生的事情。当处理这类问题时,我经常在每个语句之后都会在C+C++代码中使用一个打印语句(如果使用CERP,如果C++,fPrtTf(STDRR)如果是C)。虽然不是很优雅,但它会精确地指出代码给您带来问题的那一行,您会很快得到答案。