0

私はjniでこのチュートリアルに従っています。

1) メソッドを使用して test\Test.java ファイルを作成する手順

public native static int getDouble(int n);

2) ヘッダー ファイルをコンパイルして生成しました。(javac、javah)

3) VC Win32 プロジェクトの作成 (アプリケーション タイプ: DLL)

4) プロジェクトのプロパティを次のように変更

%JAVA_HOME%\include;%JAVA_HOME\include\win32\

5) vc プロジェクトに貼り付けた test_Test.h をコピーします。

6) Build > Configration Manager (プラットフォームを x64 に変更)

7) ソリューションのビルド + 結果の .dll ファイルを Test.java クラス パスにコピーします。

8) Test.java を変更して、ネイティブ関数呼び出しの呼び出しを含めます。

package test;

public class Test {

    public native static int getDouble(int n);

    public static void main(String[] args) {
        System.loadLibrary("jni_example");

        for (int n = 1; n <= 20; n++) {
            System.out.println(n + " x 2 = " + getDoubled(n));
        }
    }
}

9) もう一度テストをコンパイルしようとすると、問題が発生します。

D:\workspace\jni_example>ls
jni_example.dll  test  test_Test.h

D:\workspace\jni_example>javac -classpath . test\Test.java
test\Test.java:11: cannot find symbol
symbol  : method getDoubled(int)
location: class test.Test
                        System.out.println(n + " x 2 = " + getDoubled(n));
                                                           ^
1 error

System.out 行をコメントアウトすると、もちろん何も出力しなくても問題なく動作します。

D:\workspace\jni_example>java -version
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) 64-Bit Server VM (build 20.5-b03, mixed mode)

これのどこが間違っているのですか?

4

2 に答える 2

5

これはスペルミスです。 getDoubled()getDouble()

于 2013-04-24T12:06:00.070 に答える
2

タイプミスを書いたため、エラーが発生しています。あなたが呼んでいます

System.out.println(n + " x 2 = " + getDoubled(n));

しかし、あなたはそれを次のように宣言しています

public native static int getDouble(int n);

と の違いに注意してgetDoubleくださいgetDoubled

宣言を次のように変更します

public native static int getDoubled(int n);

これで問題は解決します。

于 2013-04-24T12:09:47.067 に答える