2013-02-10 27 views
10

Tôi đã nhập điều này vào dấu nhắc lệnh và tôi không chắc chắn lý do tại sao nó không phải là tên lớp hợp lệ cho rằng nó có vị trí trên đĩa và tên lớp đầy đủ. Phiên bản Java hoạt động và tôi đang chạy phiên bản mới nhất của JVM với JDK, cũng là CLASSPATH được cấu hình đúng cách.Lệnh Javah cho các phương thức gốc cung cấp Ngoại lệ

Lớp là thế này:

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

Và args dòng lệnh là:

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

Đã xem 10,594 lần, vui lòng mở câu hỏi này! – User3

Trả lời

12

classpath phải trỏ đến thư mục gốc nơi gói cấp cao nhất của bạn (JNI) đi vào, không để thư mục nơi lớp học của bạn nằm trên thực tế.

Tên lớp không được bao gồm tiện ích mở rộng .class.

Hãy nghĩ về điều này khi hoạt động trên các lớp học và không phải là tệp vật lý.

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

Ngoài ra bạn nên làm theo quy ước đặt tên Java và làm cho tên gói của bạn chữ thường.

+4

Bối rối về lý do tại sao chuỗi này bị đóng, tôi là "khách truy cập trong tương lai" và tôi được trợ giúp từ chủ đề này.^_ ^ – Gearon

Các vấn đề liên quan