17

これをコマンドプロンプトに入力しましたが、ディスク上の位置と完全修飾クラス名があることを考えると、有効なクラス名ではないと言っている理由がわかりません。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.");
}

コマンドライン引数は次のとおりです。

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)
4

1 に答える 1

16

classpathクラスが物理的に配置されているフォルダーではなく、最上位パッケージ (JNI) が移動するルート フォルダーを指す必要があります。

クラス名に.class拡張子を含めないでください。

物理ファイルではなく、クラスを操作していると考えてください。

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

また、Java 命名規則に従い、パッケージ名を小文字にする必要があります。

于 2013-02-10T05:43:27.533 に答える