Javah 工具错误: 找不到 hellojni 的类文件

2022-09-01 07:03:40

我正在尝试在Windows 7 OS上使用javah工具从命令行创建头文件,但我一直都失败了。

我遵循了不同的方法,甚至从oracle阅读了javah工具的文档,但它们并没有帮助克服这个问题。

我的类文件 () 和 java 文件 () 都位于驱动器的根目录中。hellojni.classhellojni.javaD:\

但是每当我运行javah工具时,它都会给我一个错误:

找不到 hellojni 的类文件

我也尝试提供类路径,但没有得到任何头文件。


答案 1

我怀疑问题是你的类有一个包,你试图从目录运行命令与类文件而不是包根目录。

Samhain的例子之所以有效,是因为他没有包含任何包,而我怀疑你的包包含。MyClass.java

例如,假设我们在c:\src\com\example\MyClass.java

package com.example;

public class MyClass {
    public native void myMethod();
}

转到命令行并执行以下操作:

c:\src\com\example>javac MyClass.java

c:\src\com\example>dir

 Directory of C:\src\com\example

2015-02-23  03:17 PM    <DIR>          .
2015-02-23  03:17 PM    <DIR>          ..
2015-02-23  03:20 PM               219 MyClass.class
2015-02-23  03:17 PM                84 MyClass.java

c:\src\com\example>javah MyClass
Error: Could not find class file for 'MyClass'.

c:\src\com\example>cd c:\src

c:\src>javah com.example.MyClass

c:\src>dir
 Directory of C:\src

2015-02-23  03:18 PM    <DIR>          .
2015-02-23  03:18 PM    <DIR>          ..
2015-02-23  03:16 PM    <DIR>          com
2015-02-23  03:18 PM               449 com_example_MyClass.h

成功!


答案 2

在尝试为Java本机接口(JNI)实现分两步编译和生成C / C++标头时,我也遇到了同样的问题(我怀疑这是您尝试从文件名中执行的操作)。对我来说,解决它的方法是使用以下命令将两个步骤合并为一个:

javac YOUR_CLASS_FILE_NAME.java -h .

点 (.) 包括当前路径。此命令只能从 Java 8 开始运行。


推荐