javah 错误: 找不到 'XX' 的类文件或Exception in thread "main" name: XX.class

java用JNI时,会用到javah成生.h的头文件,但会报错找不到文件。

你可能打开目录后,明明看到有class文件就是报错找不到文件,是因为javah要先去找class包名。什么意思呢?

上源码吧。

如果你有一个这样的java类:

public class hello{
    public static native String init(String umi);

注意这个类没有包名时,那么你要javah生成.h文件的时候,直接shell或者命令提示符到这个java类所在的目录下,用javac hello.java 先生成class文件,就可以看到多了一个hello.class的文件,这时你就可以javah hello生成.h的文件了。生成的.h文件在当前目录,即class文件所在的目录。


如果这个类有包名时,如这样的:

com.company.helloworldproject.Class
public class hello{
    public static native String init(String umi);
那么,这个类的完整目录差不多是在这里的:D:\my\app\src\main\java\com\company\helloworldproject\Class, (后面以这个目录为例)这时shell或者命令提示符到你项目的文件夹java目录下,运行javah 包名.类名即 javah com.company.helloworlproject.class.hello就可以直接生成.h文件了,都不用javac先生成class文件。

总结一下:javah生成.h文件时,如果你的java类是有包名时,不应该到class文件所在的目录运行javah命令,而应该在包名的上一个目录运行,即运行:javah 包名+类名.class,生成的.h文件在java目录。

如果java类是没有包名时,javah 直在shell到class文件所在的目录运行:javah 类名.class.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值