2013-02-10 16 views
10

मैंने इसे कमांड प्रॉम्प्ट में दर्ज किया और मुझे यकीन नहीं है कि यह क्यों कह रहा है कि यह वैध वर्ग नाम नहीं है क्योंकि यह डिस्क और पूरी तरह से योग्य वर्ग नाम की स्थिति है। जावा - संस्करण काम करता है और मैं जेडीके के साथ जेवीएम का नवीनतम संस्करण चला रहा हूं, क्लासस्पैट भी ठीक से कॉन्फ़िगर किया गया है।मूल विधियों के लिए जावा कमांड अपवाद

वर्ग यह है:

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

10,594 बार देखा गया, कृपया इस प्रश्न को खोलें! – User3

उत्तर

12

classpath रूट फ़ोल्डर पर ले जाना चाहिए जहां अपने शीर्ष स्तर पैकेज (JNI) को जाता है, नहीं करने के लिए वह फ़ोल्डर जहां आपकी कक्षा शारीरिक रूप से स्थित है।

कक्षा नाम में .class एक्सटेंशन शामिल नहीं होना चाहिए।

इसके बारे में कक्षाओं पर परिचालन के रूप में सोचें और भौतिक फाइलों के बारे में सोचें।

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

इसके अलावा, आप जावा नामकरण रिवाजों का पालन करें और अपनी पैकेज के नाम लोअर केस बनाना चाहिए।

+4

इस धागे को बंद करने के कारण के बारे में उलझन में, मैं "भविष्य के आगंतुक" हूं और मुझे इस धागे से मदद मिली है।^_ ^ – Gearon

संबंधित मुद्दे