2012-04-03 101 views
1

我可以用它返回一個指向一個本地方法?
我使用的語法如下: public native int* intArrayMethod(float[] t,int nb_of_subscribers,int tags); 但它表示錯誤。JNI返回類型

+2

會的Java做什麼用返回的指針? – 2012-04-03 17:33:12

+0

事實上,我需要的陣列,但我不能返回一個指針array.The用於插入MySQL查詢。 – holy 2012-04-03 17:34:15

+0

谷歌 'jintarray' – 2012-04-03 17:36:04

回答

2

您的不應該在Java中使用原生指針,因爲C++和Java之間的數據結構不同。和Java的垃圾收集器。

你的Java類應該是這樣的:

public class IntArrayViaJNI { 
     private static boolean loaded = false; 
     private native int[] intArrayMethod(float[] t, int nb_of_subscribers, int tags); 

     public int[] getIntArray(float[] t, int nb_of_subscribers, int tags) { 
      // Although this portion should be in a synchronized method, 
      // e.g. ensureLibraryLoaded(). 
      if (!loaded) { 
      System.loadLibrary("mylib"); 
      loaded = true; 
      } 
      return intArrayMethod(t, nb_of_subscribers, tags); 
     } 
    } 

而且你的C++代碼應該是這樣的:

JNIEXPORT jintArray JNICALL Java_IntArrayViaJNI_intArrayMethod(
     JNIEnv *env, jclass cls, 
     /* generated by JAVAH: float[] t, int nb_of_subscribers, int tags */) 
    { 
     jintArray result = (*env)->NewIntArray(env, size); 
     if (result == NULL) { 
     return NULL; /* out of memory error thrown */ 
     } 
     int i, size = MY_ARRAY_SIZE; 

     // Populate a temp array with primitives. 
     jint fill[256]; 
     for (i = 0; i < size; i++) { 
     fill[i] = MY_ARRAY_VALUE; 
     } 

     // Let the JVM copy it to the Java structure. 
     (*env)->SetIntArrayRegion(env, result, 0, size, fill); 
     return result; 
    }