Команда Javah для собственных методов дает исключение

Я ввел это в командную строку, и я не уверен, почему он говорит, что это не допустимое имя класса, учитывая, что у него есть позиция на диске и полное имя класса. Java - версия работает, и я запускаю последнюю версию JVM с JDK, также 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.");
}

И аргументы командной строки:

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)

Ответ 1

classpath должен указывать на корневую папку, куда входит ваш пакет верхнего уровня (JNI), а не в папку, в которой физически находится ваш класс.

Имя класса не должно включать расширение .class.

Подумайте об этом как о работе на классах, а не в физических файлах.

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

Также вы должны следовать соглашениям об именах Java и делать имена ваших пакетов в нижнем регистре.