java - 在 Java 中使用 native 代码

标签 java c linux java-native-interface javah

我想创建 c 库并在 Linux 操作系统上的 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 类文件。

看来我犯了一个重大错误,有什么解决这个问题的建议吗?

最佳答案

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

关于java - 在 Java 中使用 native 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27361948/

相关文章:

c - 为什么 GCC -Ofast 使程序出错,但仅在它打印两次结果时才出错?

在 C 中更改网络设置

c - nftw 传递具有未定义值的 tflag

javascript - Java selenium javascript 执行器返回空数组

关于赋值运算符的c编程查询请在windows和linux中指定输出及其原因

java - 对一些明文进行两次编码并获得相同的哈希值

linux - 如何从c程序中获取进程名称?

c++ - 函数返回时 Linux c++ system() 调用崩溃

java - 沿元素将列表拆分为子列表

java - 这种声明的类型是什么?