2009-10-22 106 views

回答

92

如果你检查的文件,仍然有应该是你最初的问题的一部分问题。在这种情况下,示例中的JNI函数创建了一些数组。外阵列由一个“物件”阵列用JNI函数NewObjectArray()创建的。从JNI的角度来看,这是一个二维数组,它是一个包含许多其他内部数组的对象数组。

下面的for循环创建内阵列它们是int类型使用JNI函数NewIntArray() []的。如果你只是想回到整数的一维数组,然后NewIntArray()功能是你会用什么来创造的返回值。如果你想创建的字符串的一维数组,那么你应该使用NewObjectArray()功能,但与类不同的参数。

由于要返回一个int数组,那么你的代码将是这个样子:

JNIEXPORT jintArray JNICALL Java_ArrayTest_initIntArray(JNIEnv *env, jclass cls, int size) 
{ 
jintArray result; 
result = (*env)->NewIntArray(env, size); 
if (result == NULL) { 
    return NULL; /* out of memory error thrown */ 
} 
int i; 
// fill a temp structure to use to populate the java int array 
jint fill[size]; 
for (i = 0; i < size; i++) { 
    fill[i] = 0; // put whatever logic you want to populate the values here. 
} 
// move from the temp structure to the java structure 
(*env)->SetIntArrayRegion(env, result, 0, size, fill); 
return result; 
} 
+0

是啊,我这样做了。我在理解与我的问题(最后一个)有关的例子时遇到了困难,我想知道是否有人会介绍一个简单的例子,只返回一个int []。 – RyanCheu 2009-10-22 21:30:07

+0

编辑:请忽略我以前的评论,上面的代码确实有效。 谢谢!这非常有帮助。 – RyanCheu 2009-10-23 21:23:46

+3

EDIT2:代码有效,但你必须在SetIntArrayRegion(...)中更改tmp来填充。 – RyanCheu 2009-10-23 21:25:08

30

,如果有人想知道如何返回String []数组:

的java代码

private native String[] data(); 

本地出口

JNIEXPORT jobjectArray JNICALL Java_example_data() (JNIEnv *, jobject); 

本地代码

JNIEXPORT jobjectArray JNICALL 
       Java_example_data 
    (JNIEnv *env, jobject jobj){ 

    jobjectArray ret; 
    int i; 

    char *message[5]= {"first", 
         "second", 
         "third", 
         "fourth", 
         "fifth"}; 

    ret= (jobjectArray)env->NewObjectArray(5, 
     env->FindClass("java/lang/String"), 
     env->NewStringUTF("")); 

    for(i=0;i<5;i++) { 
     env->SetObjectArrayElement( 
     ret,i,env->NewStringUTF(message[i])); 
    } 
    return(ret); 
    } 

从链接: http://www.coderanch.com/t/326467/java/java/Returning-String-array-program-Java