本机方法的Javah命令提供了Exception

Sar*_*abo 13 java java-native-interface javah

我把它输入命令提示符并且我不确定为什么它说它不是一个有效的类名,因为它在磁盘上有位置和完全限定的类名.Java - 版本工作,我正在使用JDK运行最新版本的JVM,CLASSPATH也正确配置.

这个课是这样的:

package JNI;

public class Main {

public native void printTitle();

public static void main(String[] args) {
    Main main = new Main();
    main.print();
}

public void print(){
    System.out.println("The print subroutine has finished.");
}
Run Code Online (Sandbox Code Playgroud)

命令行参数是:

C:\Users\USER\Documents\NetBeansProjects\JNI Test Project\build\classes\JNI>javah -jni -classpath "C:\Users\USER\Documents\NetBeansProjects\JNI Test Project\build\classes\JNI" JNI.Main.class
Exception in thread "main" java.lang.IllegalArgumentException: Not a valid class name: JNI.Main.class
    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.JavahTask.run(JavahTask.java:509)
    at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
    at com.sun.tools.javah.Main.main(Main.java:46)
Run Code Online (Sandbox Code Playgroud)

Ole*_*eev 14

classpath 应该指向顶级包(JNI)所在的根文件夹,而不是指向您的类实际所在的文件夹.

类名不应包含.class扩展名.

将其视为在类而不是物理文件上运行.

javah -jni -classpath "C:\Users\GETH COMMANDER\Documents\NetBeansProjects\JNI Test Project\build\classes" JNI.Main

此外,您应该遵循Java命名约定并使您的包名称小写.

  • 对这个帖子关闭的原因感到困惑,我是"未来的访客",我从这个帖子得到了帮助.^ _ ^ (6认同)