2009-10-22 105 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