2013-04-29 69 views
2

我有類似功能的東西,c將整型數組到Java int數組JNI

int * print(int count) 
{ 
    int * myarray; 
    int i=0; 
    myarray = (int *)(malloc(sizeof(int))*count); 
    for(i=0;i<count;i++) 
    { 
     myarray[i] = i; 
    } 
    return myarray; 
} 

現在,我怎麼能使用JNI

我想這樣

jintArray Java_com_example_testmyapp_MainActivity_JListPrint(JNIEnv* env, jobject thiz) 
{ 
    return print(5); 
} 
使用myArray的java開發

,並在Java

int a[] = JListPrint() 

但是我的應用進行了崩潰

指針,建議好嗎?

回答

5

我發現最有用的網站:http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

#define ARRAY_LENGTH 5 

jintArray Java_com_example_testmyapp_MainActivity_JListPrint(JNIEnv *env, jobject thiz) 
{ 
    jintArray intJavaArray = (*env)->NewIntArray(env, ARRAY_LENGTH); 
    int *intCArray = print(ARRAY_LENGTH); 

    if (NULL == intJavaArray) { 

     if (NULL != intCArray) { 
      free(intCArray); 
     } 
     return NULL; 
    } 

    (*env)->SetIntArrayRegion(env, intJavaArray, 0, ARRAY_LENGTH, intCArray); 

    return intJavaArray; 
} 
+1

INT intCArray [] =打印(ARRAY_LENGTH);說一個無效的初始化 – Naruto 2013-04-30 06:20:01

+0

我的錯誤,編輯修復 – SpacedMonkey 2013-04-30 09:14:42

+0

感謝您的回答.... – Naruto 2013-05-03 09:56:09

1

Java原始數組是不一樣的本地陣列。要訪問它們,你必須使用JNI函數。

爲您的代碼,你需要使用:

  • jintArray NewIntArray()
  • void SetIntArrayRegion(JNIEnv *env, ArrayType array, jsize start, jsize len, NativeType *buf)

Oracle documentation on these JNI functions