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

S.S*_*ota 31 java java-native-interface javah

我试图在Windows 7操作系统上从命令行使用javah工具创建头文件,但我一直都失败了.

我有不同的方法,甚至从oracle阅读javah工具的文档,但他们没有帮助克服这个问题.

我的类file(hellojni.class)和java file(hellojni.java)都在D:\驱动器的根目录中.

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

找不到hellojni的类文件

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

hen*_*lst 104

我怀疑问题是您的类有一个包,并且您尝试使用类文件而不是包根目录运行该命令.

Samhain的例子很有效,因为他MyClass.java没有包装,而我怀疑你的包装没有.

例如,假设我们有以下文件 c:\src\com\example\MyClass.java

package com.example;

public class MyClass {
    public native void myMethod();
}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

成功!

  • 非常感谢...节省了我很多时间...因此upvote ...爱你男人!!! ...你摇滚男人!!! (9认同)

Abd*_*eem 10

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

javac YOUR_CLASS_FILE_NAME.java -h .
Run Code Online (Sandbox Code Playgroud)

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


Sam*_*ain 8

javah -classpath path_to_jars_or_classes com.my.package.MyClass.

如果使用-verbose运行javah -verbose -classpath path_to_jars_or_classes com.my.package.MyClass,它将显示用于查找类的搜索路径.您可以使用它来验证是否列出了您的目录D:\.

请参阅javah文档

示例:文件名为MyClass.java,内部类名称为MyClass.没有错误.

C:\>more MyClass.java
public class MyClass
{
   public static void doSomething(int b)
   {
      return;
   }
}

C:\>javac MyClass.java

C:\>javah -classpath C:\ MyClass

C:\>dir *.h
 Volume in drive C has no label.
 Volume Serial Number is XXXX-XXXX

 Directory of C:\

10/07/2013  11:46 AM               242 MyClass.h
               1 File(s)            242 bytes
               0 Dir(s)  X bytes free
Run Code Online (Sandbox Code Playgroud)