2013-04-24 71 views
0

我在jni上关注this tutorialJNI找不到原生方法(test Test.java:11:找不到符号)

1)步骤制备的测试\ 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)结构> Confugration管理器(变更平台到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

这是拼写错误。 getDoubled()getDouble()

+3

@ShafikYaghmour“参考”是错误的。为什么本地方法'getDouble()'被称为'getDoubled()'? – 2013-04-24 12:09:29

+1

@ShafikYaghmour该参考文献也有这个错字。 – 2013-04-24 12:13:23

+0

它工作!谢啦!我不得不在cpp文件中更改,我不能接受5分钟后的更新。再次感谢:) – 2013-04-24 12:14:05

2

由于您输入了错字,您正在收到错误。要调用

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

但是你宣布它像

public native static int getDouble(int n); 

通知getDoublegetDoubled之间的差异。

声明更改为

public native static int getDoubled(int n); 

这解决了问题。

+0

是的这解决了这个问题,谢谢。 – 2013-04-24 12:15:24

+0

我很乐意提供帮助。 – 2013-04-24 12:17:47