在java中使用本机代码

时间:2014-12-08 16:05:19

标签: java c linux java-native-interface javah

我想创建c库并在Linux OS上的java代码中使用它。我试图理解并实施自然库概念。  我按照本教程进行操作 http://diglib.stanford.edu:8091/~testbed/doc/JavaUsage/JNI/tutorial.txt

这有助于我理解一点概念。但是,当我尝试自己做错时,我会收到错误。我接受了我遇到的错误,但解决方案都没有帮助。

我编写的自然库的主类代码和类如下:

package natLib;
import natLib.getKeyPressed;
public class main {
public static void main(String[] args) {
    getKeyPressed natlab=new getKeyPressed();
    char c=natlab.keyboardPressedKey();

}
}

package natLib;    
public class getKeyPressed {
static {
 System.loadLibrary("natlab");
    }
public native char keyboardPressedKey();
}

当我写" javac main.java" 我得到像

这样的错误

" main.java:6:错误:找不到符号         getKeyPressed natlab = new getKeyPressed();"

当我跳过main并且只使用本机方法为类进行javac prcess时,尝试获取头文件  javah -jni getKeyPressed.class

虽然有一个文件为getKeyPressed.class,但我得到的错误如下:

"Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name:     getKeyPressed.class"

我试着没有.class延伸它说

"Error: Could not find class file for 'getKeyPressed'."

它说即使我通过复制getKeyPressed.class来制作getKeyPressed类文件。

我似乎犯了一个重大错误,有什么建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

javah需要一个完全限定的类名。 (例如natLib.getKeyPressed,而不仅仅是getKeyPressed)