2013-02-10 12 views
10

Wprowadziłem to do wiersza polecenia i nie jestem pewien, dlaczego mówi, że nie jest prawidłową nazwą klasy, biorąc pod uwagę, że ma ona położenie na dysku i pełną nazwę klasy. Wersja Java działa, a ja korzystam z najnowszej wersji JVM z JDK, również CLASSPATH jest poprawnie skonfigurowany.Polecenie Javah dla metod natywnych daje wyjątek

Klasa jest taka:

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."); 
} 

A argumenty linii poleceń są:

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) 
+0

Wyświetlono 10 594 razy, otwórz to pytanie! – User3

Odpowiedz

12

classpath powinien wskazywać do głównego folderu gdzie top pakiet poziom (JNI) idzie, nie folder, w którym fizycznie znajduje się twoja klasa.

Nazwa klasy nie powinna zawierać rozszerzenia .class.

Pomyśl o tym, jak działa na klasach, a nie pliki fizyczne.

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

Ponadto należy postępować Java konwencje nazewnictwa i Nakręć nazwach pakietów małymi literami.

+4

Nie rozumiem, dlaczego wątek jest zamknięty, jestem "przyszłymi użytkownikami" i otrzymałem pomoc od tego wątku.^_ ^ – Gearon

Powiązane problemy