त्रुटि 'मुख्य वर्ग को ढूंढा या लोड नहीं किया जा सका ' तब होता है जब टर्मिनल में क्लास नाम निर्दिष्ट करके जावा प्रोग्राम लॉन्च करने के लिए कमांड प्रॉम्प्ट में जावा कमांड का उपयोग किया जाता है। ऐसा होने का मुख्य कारण क्लास की घोषणा करते समय उपयोगकर्ता की प्रोग्रामिंग गलती है।
जैसा कि पहले उल्लेख किया गया है, यह त्रुटि ज्यादातर सिस्टम से संबंधित नहीं है और उपयोगकर्ता कई परिदृश्यों में गलती करता है जैसा कि नीचे दिखाया गया है। आगे बढ़ने से पहले, हम मानते हैं कि आपको जावा प्रोग्रामिंग भाषा का बुनियादी ज्ञान है और यह कैसे काम करता है।
जावा में 'मुख्य वर्ग को ढूंढ या लोड नहीं कर सका' त्रुटि का क्या कारण है?
संदेश 'मुख्य वर्ग को ढूंढ या लोड नहीं कर सका' का अर्थ है कि निष्पादन के लिए कक्षा लाने वाले जावा इंजन का पहला चरण विफल हो गया है। जावा कमांड पता लगाने में सक्षम नहीं था सही निर्देशिका में कक्षा।
कुछ मामलों में, आपको सही फ़ाइल पथ जोड़ना होगा और जावा टर्मिनल को सही स्थान पर इंगित करें। चूंकि आप कमांड लाइन टर्मिनल से कमांड निष्पादित कर रहे हैं, कंप्यूटर को यह नहीं पता है कि कक्षा कहां मिलनी है या यह कहां स्थित है। लक्षित आईडीई में, यह समस्या नहीं है क्योंकि आईडीई वर्तमान कार्यशील निर्देशिका की ओर इशारा करते हुए एक सूचक रखता है।
'जावा <वर्ग-नाम>' सिंटैक्स क्या है?
इससे पहले कि हम समस्या निवारण शुरू करें, निष्पादित करने का प्रयास करते समय टर्मिनल हमें एक त्रुटि क्यों लौटा रहा है, पहले हमें कमांड के सिंटैक्स को देखने की आवश्यकता है। यदि आप सही सिंटैक्स का उपयोग नहीं कर रहे हैं, तो आपको अनिवार्य रूप से इस त्रुटि का सामना करना पड़ेगा।
कमांड का सामान्य सिंटैक्स कुछ इस प्रकार है:
java [ <option> ... ] <class-name> [<argument> ...]
यहां <विकल्प> एक कमांड लाइन विकल्प है, <वर्ग-नाम> एक पूरी तरह से योग्य जावा वर्ग का नाम है, और
एक मान्य कमांड का एक उदाहरण है:
java -Xmx100m com.acme.example.ListAppuals kevin arrows bart
उपरोक्त आदेश जावा कमांड को निम्नलिखित कार्यों को निष्पादित करेगा:
- यह कक्षा 'com.acme.example.ListAppuals के संकलित संस्करण की खोज करेगा '.
- खोज करने के बाद, यह कक्षा को लोड करेगा।
- अगला, जब कक्षा लोड हो जाती है, तो कक्षा को वैध हस्ताक्षर, संशोधक और वापसी प्रकार के साथ 'मुख्य' विधि के लिए खोजा जाएगा। एक नमूना मुख्य वर्ग कुछ ऐसा होगा:
public static void main(String[])
- विधि को 'केविन', 'एरो', और 'बार्ट' तर्कों के साथ स्ट्रिंग [] कहा जाएगा।
कैसे ठीक करें 'मुख्य वर्ग को ढूंढा या लोड नहीं किया जा सका'
समाधान 1:वर्ग नाम तर्क की जांच करना
उपयोगकर्ताओं द्वारा की जाने वाली सबसे आम गलती यह है कि वे तर्क के रूप में गलत वर्ग नाम प्रदान करते हैं (या सही वर्ग का नाम गलत रूप है)। चूंकि हम कमांड लाइन पर पैरामीटर घोषित कर रहे हैं, यह अत्यधिक संभावना है कि आप क्लास नाम तर्क को गलत रूप में पास करेंगे। यहां हम उन सभी संभावित परिदृश्यों की सूची देंगे जहां आप गलती कर सकते हैं।
- एक साधारण वर्ग नाम लिखना . यदि आप 'com.acme.example' जैसे पैकेज में कक्षा घोषित करते हैं, तो आपको पूर्ण वर्गनाम का उपयोग करना चाहिए जावा कमांड में पैकेज सहित।
java com.acme.example.ListAppuals
के बजाय
java ListAppuals
- आपको वर्गनाम घोषित करना चाहिए फ़ाइल नाम या पथनाम घोषित करने के बजाय। यदि आप इसके लिए पथनाम/फ़ाइल नाम घोषित करते हैं तो जावा कक्षा नहीं लाता है। गलत प्रविष्टियों में निम्नलिखित शामिल हैं:
java ListAppuals.class java com/acme/example/ListAppuals.class
- आवरण ध्यान में रखा जाना चाहिए। जावा कमांड केस संवेदी होते हैं और यदि आप एक भी अक्षर की गलती करते हैं, तो आप मुख्य वर्ग को लोड नहीं कर पाएंगे। गलत गलतियों . का एक उदाहरण हैं:
java com.acme.example.listappuals
- आपको नहीं करना चाहिए एक स्रोत फ़ाइल नाम घोषित करें . जैसा कि पहले उल्लेख किया गया है, आपको केवल कक्षा को सही पूर्ण वर्गनाम प्रारूप में घोषित करने की आवश्यकता है। एक गलती का उदाहरण है:
java ListAppuals.java
- यह त्रुटि तब भी होगी जब आप टाइप करने की गलती करेंगे या कक्षा का नाम पूरी तरह से लिखना भूल जाएं ।
यदि आपने कक्षा का नाम घोषित करने में कोई गड़बड़ी की है, तो सुनिश्चित करें कि आपने इसे ठीक कर लिया है और फिर प्रोग्राम लॉन्च करने का प्रयास करें।
समाधान 2:क्लासपाथ जांचा जा रहा है
यदि आपने क्लासनाम को सही ढंग से घोषित किया है लेकिन फिर भी त्रुटि दिखाई दे रही है, तो संभावना है कि जावा कमांड पथ पर निर्दिष्ट क्लासनाम नहीं ढूंढ सका। क्लासपाथ एक पथ है जहां जावा रनटाइम संसाधन और क्लास फाइलों की खोज करता है। आप नीचे दिखाए गए अनुसार दो अलग-अलग कमांड का उपयोग करके आसानी से क्लासपाथ सेट कर सकते हैं:
C:> sdkTool -classpath classpath1;classpath2... C:> set CLASSPATH=classpath1;classpath2...सेट करें
क्लासपाथ के बारे में अधिक जानकारी प्राप्त करने के लिए, आपको निम्न दस्तावेज़ों को देखना चाहिए।
जावा कमांड दस्तावेज़ीकरण
क्लासपाथ सेट करना
समाधान 3:निर्देशिका जांचा जा रहा है
जब आप एक निर्देशिका को क्लासपाथ के रूप में घोषित करते हैं, तो यह हमेशा नामस्थान की जड़ के अनुरूप होगा। उदाहरण के लिए यदि "/usr/local/acme/classes" क्लासपाथ पर है, तो जावा "com.acme.example.Appuals" क्लास की खोज करेगा। यह निम्न पथनाम वाले वर्ग की तलाश करेगा:
/usr/local/acme/classes/com/acme/example/Appuals.class
तो संक्षेप में, यदि आप निम्न पते को क्लासपाथ में डालते हैं, तो जावा कक्षा को नहीं ढूंढ पाएगा:
/usr/local/acme/classes/com/acme/example
आपको अपनी उपनिर्देशिका . भी देखनी चाहिए और देखें कि क्या यह FQN से मेल खाता है। अगर आपकी कक्षा FQN “com.acme.example.Appuals” है, तो Java “com/acme/example” निर्देशिका में “Appuals.class” की खोज करेगा।
आपको एक उदाहरण देने के लिए, आइए निम्नलिखित परिदृश्य को मान लें:
- आप जिस कक्षा को चलाना चाहते हैं वह है:com.acme.example.Appuals
- पूर्ण फ़ाइल पथ है:/usr/local/acme/classes/com/acme/example/Appuals.class
- वर्तमान कार्यशील निर्देशिका है:/usr/local/acme/classes/com/acme/example/
तब निम्नलिखित परिदृश्य होंगे:
# wrong, FQN is needed java Appuals # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Appuals # wrong, similar to above scenario java -classpath . com.acme.example.Appuals # OK ; a relative classpath is set java -classpath ../../.. com.acme.example.Appuals # OK; an absolute classpath is set java -classpath /usr/local/acme/classes com.acme.example.Appuals
नोट: क्लासपाथ को अन्य सभी वर्गों (गैर-सिस्टम) को भी शामिल करने की आवश्यकता है जो आपके अनुप्रयोगों को चाहिए।
समाधान 4:क्लास पैकेज की जांच करना
यदि उपरोक्त सभी समाधान आपके मामले में सही हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपका स्रोत कोड सही फ़ोल्डर में रखा गया है। साथ ही, आपने पैकेज . को सही ढंग से घोषित किया है . यदि आप अपना कोड IDE के साथ चलाते हैं, तो यह संभवतः आपको समस्या के बारे में सूचित करेगा। हालांकि, हमारे मामले में, चूंकि हम इसे कमांड प्रॉम्प्ट में चला रहे हैं, इसलिए गलती पर किसी का ध्यान नहीं जाएगा और आपको चर्चा के तहत क्लास एरर मिलेगा।