生成JNI头文件时出错

Error when generating JNI header file

本文关键字:出错 文件 JNI 生成      更新时间:2023-10-16

我试图通过命令行生成JNI头文件。当我输入javah myclass.class,错误是

Exception in thread main java.IllegalArgumentException: not a valid class name
at com.sun.tools.javac.api.JavacTool.getTask<JavacTool.java:177>
at com.sun.tools.javac.api.JavacTool.getTask<JavacTool.java:68>
at com.sun.tools.javah.api.JavachTask.run<JavahTask.java:509>
at com.sun.tools.javah.api.JavachTask.run<JavahTask.java:335>
at com.sun.tools.javah.Main.main<Main.java:46>

但是当我输入javah myclass

错误:找不到myclass的类文件

以前,当我在类目录中输入ls时,类文件是存在的。

这是我的代码片段

package com.blablabla
public static native long myclass(long n);

有人知道如何解决这个问题吗?

谢谢

也许你应该试着给出完全限定的类名:-

javah com.blablabla.myclass

类名以小写字母开头,尝试使用大写字母,这是Java中强制的约定。此外,尝试指定全限定名称(列出由.分隔的所有包)

去掉参数的.class部分。参数是完全限定的类名,不是文件名。

获得完全限定的类名是非常痛苦的。如果您想编写自己的解决方案,您可以查看我编写的处理这个令人头痛的问题的脚本集,或者只是处理这个特定问题的脚本。

我打开cmd窗口(显然是Windows),在包含java .exe的文件夹中,我键入

javah -classpath C:myprojectpathPackageDirectorypackagenamebuildtmpkotlin-classesdebug com.company.package.MyKotlinClass

文件mykotlclass .class在文件夹

C:myprojectpathPackageDirectorypackagenamebuildtmpkotlin-classesdebugcomcompanypackage
注意,我使用了指定类路径和限定类名的混合方法。