त्रुटि 'Could not find or load main class' तब होती है जब कमांड प्रॉम्प्ट में एक java कमांड का उपयोग करके एक Java प्रोग्राम को लॉन्च किया जाता है जिसमें टर्मिनल में क्लास नाम निर्दिष्ट किया जाता है। ऐसा होने का कारण ज्यादातर क्लास घोषित करते समय उपयोगकर्ता की प्रोग्रामिंग गलती के कारण होता है।

जैसा कि पहले उल्लेख किया गया है, यह त्रुटि ज्यादातर सिस्टम से संबंधित नहीं है और उपयोगकर्ता नीचे दिखाए गए कई परिदृश्यों में गलती करता है। आगे बढ़ने से पहले, हम मानते हैं कि आपको Java प्रोग्रामिंग भाषा का बुनियादी ज्ञान है और यह कैसे काम करती है।
Java में 'Could not find or load main class' त्रुटि के कारण क्या हैं?
संदेश 'Could not find or load main class' का अर्थ है कि निष्पादन के लिए क्लास लाने के लिए Java इंजन का पहला चरण विफल हो गया है। java कमांड सही डायरेक्टरी में क्लास को ढूंढने में सक्षम नहीं था।
कुछ मामलों में, आपको सही फाइल पथ जोड़ना होगा और Java टर्मिनल को सही स्थान पर इंगित करना होगा। चूंकि आप कमांड लाइन टर्मिनल से कमांड निष्पादित कर रहे हैं, कंप्यूटर को नहीं पता कि क्लास कहां मिलेगी या कहां स्थित है। लक्षित IDE में, यह समस्या नहीं है क्योंकि IDE वर्तमान वर्किंग डायरेक्टरी की ओर इशारा करने वाला एक पॉइंटर रखता है।
'java <class-name>' सिंटैक्स क्या है?
इससे पहले कि हम समस्या निवारण शुरू करें कि टर्मिनल निष्पादित करने का प्रयास करते समय हमें त्रुटि क्यों लौटा रहा है, पहले हमें कमांड के सिंटैक्स को देखने की आवश्यकता है। यदि आप सही सिंटैक्स का उपयोग नहीं कर रहे हैं, तो आप अनिवार्य रूप से इस त्रुटि का सामना करेंगे।
कमांड का सामान्य सिंटैक्स कुछ इस तरह है:
java [ <option> ... ] <class-name> [<argument> ...]
यहां <option> एक कमांड लाइन विकल्प है, <class-name> एक पूर्ण योग्य Java क्लास नाम है, और <argument> एक कमांड लाइन आर्गुमेंट है जिसे आपके एप्लिकेशन को पास किया जाता है जब पूरा पैकेज कंपाइल होता है।
एक वैध कमांड का उदाहरण है:
java -Xmx100m com.acme.example.ListAppuals kevin arrows bart
उपरोक्त कमांड java कमांड को निम्नलिखित संचालन निष्पादित करेगा:
- यह क्लास 'com.acme.example.ListAppuals' के संकलित संस्करण की खोज करेगा।
- खोज के बाद, यह क्लास को लोड करेगा।
- अगला, जब क्लास लोड हो जाता है, तो क्लास को एक वैध हस्ताक्षर, संशोधक, और रिटर्न प्रकार के साथ 'main' विधि के लिए खोजा जाएगा। एक नमूना मुख्य क्लास कुछ इस तरह होगी:
public static void main(String[])
- विधि को 'kevin', 'arrows', और 'bart' आर्गुमेंट्स के साथ string[] के रूप में बुलाया जाएगा।
'Could not find or load main class' कैसे ठीक करें
समाधान 1: क्लास नाम आर्गुमेंट की जांच करना
उपयोगकर्ताओं द्वारा की जाने वाली सबसे आम गलती यह है कि वे एक गलत क्लास नाम को आर्गुमेंट के रूप में प्रदान करते हैं (या एक सही क्लास नाम गलत रूप में)। चूंकि हम कमांड लाइन पर पैरामीटर घोषित कर रहे हैं, यह बहुत संभावना है कि आप क्लास नाम आर्गुमेंट को गलत रूप में पास करेंगे। यहां हम उन सभी संभावित परिदृश्यों को सूचीबद्ध करेंगे जहां आप गलती कर सकते हैं।
- एक साधारण क्लास नाम लिखना। यदि आप क्लास को 'com.acme.example' जैसे पैकेज में घोषित करते हैं, तो आपको Java कमांड में पैकेज सहित पूर्ण क्लासनाम का उपयोग करना होगा।
java com.acme.example.ListAppuals
इसके बजाय
java ListAppuals
- आपको फाइलनाम या पथनाम घोषित करने के बजाय क्लासनाम घोषित करना चाहिए। Java क्लास को नहीं लाता यदि आप इसके लिए पथनाम/फाइलनाम घोषित करते हैं। गलत प्रविष्टियों में निम्न शामिल हैं:
java ListAppuals.class java com/acme/example/ListAppuals.class
- कैसिंग को ध्यान में रखा जाना चाहिए। Java कमांड केस सेंसिटिव हैं और यदि आप एक अक्षर की भी गलती करते हैं, तो आप मुख्य क्लास को लोड नहीं कर पाएंगे। गलत गलतियों का एक उदाहरण है:
java com.acme.example.listappuals
- आपको सोर्स फाइलनाम घोषित नहीं करना चाहिए। जैसा कि पहले उल्लेख किया गया है, आपको केवल सही पूर्ण क्लासनाम प्रारूप में क्लास घोषित करने की आवश्यकता है। गलती का एक उदाहरण है:
java ListAppuals.java
- यदि आप टाइपिंग गलती करते हैं या क्लास नाम पूरी तरह से लिखना भूल जाते हैं तो यह त्रुटि भी होगी।
यदि आपने क्लासनाम घोषित करने में कोई लापरवाही की गलती की है, तो इसे ठीक करना सुनिश्चित करें और फिर प्रोग्राम लॉन्च करने का प्रयास करें।
समाधान 2: क्लासपाथ की जांच करना
यदि आपने क्लासनाम सही ढंग से घोषित किया है लेकिन फिर भी त्रुटि दिखाई जाती है, तो संभावना है कि java कमांड निर्दिष्ट क्लासनाम को पथ पर नहीं ढूंढ सका। क्लासपाथ एक पथ है जहां Java रनटाइम संसाधन और क्लास फाइलों की खोज करता है। आप नीचे दिखाए गए दो अलग-अलग कमांड का उपयोग करके क्लासपाथ को आसानी से सेट कर सकते हैं:
C:> sdkTool -classpath classpath1;classpath2... C:> set CLASSPATH=classpath1;classpath2...
क्लासपाथ के बारे में अधिक जानकारी प्राप्त करने के लिए, आपको निम्नलिखित दस्तावेजों की जांच करनी चाहिए।
Java कमांड दस्तावेज़ीकरण
क्लासपाथ सेट करना
समाधान 3: डायरेक्टरी की जांच करना
जब आप एक डायरेक्टरी को क्लासपाथ के रूप में घोषित करते हैं, तो यह हमेशा नेमस्पेस की जड़ से मेल खाएगा। उदाहरण के लिए यदि "/usr/local/acme/classes" क्लासपाथ पर है, तो Java "com.acme.example.Appuals" क्लास की खोज करेगा। यह निम्न पथनाम वाली क्लास की तलाश करेगा:
/usr/local/acme/classes/com/acme/example/Appuals.class
इसलिए सार रूप में, यदि आप क्लासपाथ में निम्नलिखित पता डालते हैं, तो Java क्लास नहीं ढूंढ पाएगा:
/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/
तब निम्न परिदृश्य लागू होंगे:
# गलत, FQN की आवश्यकता है java Appuals # गलत, वर्तमान वर्किंग डायरेक्टरी में `com/acme/example` फोल्डर नहीं है java com.acme.example.Appuals # गलत, उपरोक्त परिदृश्य के समान java -classpath . com.acme.example.Appuals # ठीक; एक सापेक्ष क्लासपाथ सेट है java -classpath ../../.. com.acme.example.Appuals # ठीक; एक पूर्ण क्लासपाथ सेट है java -classpath /usr/local/acme/classes com.acme.example.Appuals
नोट: क्लासपाथ में उन सभी अन्य क्लास (गैर-सिस्टम) को भी शामिल करने की आवश्यकता है जिनकी आपके एप्लिकेशन को आवश्यकता है।
समाधान 4: क्लास पैकेज की जांच करना
यदि उपरोक्त सभी समाधान आपके मामले में सही हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि आपका सोर्स कोड सही फोल्डर में रखा गया है। साथ ही, आपने पैकेज को सही ढंग से घोषित किया है। यदि आप अपना कोड IDE के साथ चलाते हैं, तो यह शायद आपको मुद्दे के बारे में सूचित करेगा। हालांकि, हमारे मामले में, चूंकि हम इसे कमांड प्रॉम्प्ट में चला रहे हैं, गलती किसी का ध्यान नहीं जाएगी और आपको चर्चा के तहत क्लास त्रुटि मिलेगी।