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)将粘贴的test_Test.h复制到vc项目中。

6) 构建 > 配置管理器(将平台更改为 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 回答