7

Java コード :

package Package;

public class IntArray {
private native int sumArray(int[] arr);

public static void main(String args[]) {
    IntArray p = new IntArray();
    int arr[] = new int[10];
    for(int i=0 ; i<10 ; i++) {
        arr[i] = i;
    }
    int sum = p.sumArray(arr); // pass the array to the c function sumArray
    System.out.println("Sum is : " + sum);
}

 static { // 17th statement
     System.loadLibrary("IntArray");
 }
}

C コード :

#include<stdio.h>
#include "Package_IntArray.h"

jint Java_Package_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
          {
             jint buf[10];
             jint i, sum = 0;
             (*env)->GetIntArrayRegion(env, arr, 0, 10, buf);
             for (i = 0; i < 10; i++) {
                 sum += buf[i];
             }
             return sum;
          }

次に、コマンドを実行します:

java -Djava.library.path=W:\elita\jnitesters\workspace\c\IntArray\bin\Debug Package.IntArray

次の例外が発生します。

Exception in thread "main" java.lang.UnsatisfiedLinkError: Package.IntArray.sumArray([I)I
    at Package.IntArray.sumArray(Native Method)
    at Package.IntArray.main(IntArray.java:17)

ディレクトリW:\elita\jnitesters\workspace\c\IntArray\bin\DebugにIntArray.dllという名前のdllファイルがあります。

4

3 に答える 3

0

すべて順調 !しかし、あなたが試みなければならないことが1つあります。IDE code::blocksによって作成されたあらゆる種類のファイル (.dll ファイルを含む) を完全に削除します。そして、プログラムを再構築します。MACROSがある場合は省略してください。その後、動作するはずです。

于 2012-05-08T06:42:38.460 に答える
0

うーん、明らかなことは何もわかりませんが、いくつか試してみてください。

1) あなたのフルパスを指定してくださいSystem.load()。スタック トレースは、sumArray() が static である 17 行目で呼び出されていることを示しているため、少し混乱しています。

2) 周りに try/catch ブロックを置きますSystem.load()

3) メソッドを次のように定義してみてください。

 JNIEXPORT void JNICALL Java_Package_IntArray_sumArray(JNIEnv *env, jobject obj, jintArray arr)
 {
     /*Implement Native Method Here*/
 }

メソッドが .dll ファイルにエクスポートされていない可能性があります。そのため、メソッドが見つかりません。

于 2012-05-08T05:47:47.240 に答える
0

elitaNetbeans プロジェクトの forlder の下に既にフォルダーが作成されていますlib。.dll をそのフォルダーにコピーします。NetBeans IDE で右クリックし、[プロジェクト プロパティ] -> [実行] -> [VM オプション] を選択します。Djava.library.path=lib/elita

次に、IDE 自体からプログラムを実行します。

于 2012-05-08T05:54:02.853 に答える