«Could not find or load main class»: जावा में हर नौसिखिए का परिचित डर
\n\nआपने अभी-अभी Java सीखना शुरू किया है, अपना पहला HelloWorld.java लिखा है, और टर्मिनल में Enter दबाया है… और अपेक्षित अभिवादन के बजाय आपको यह ठंडा संदेश दिखाई देता है:
Error: Could not find or load main class HelloWorld\nCaused by: java.lang.ClassNotFoundException: HelloWorld\n\nपरिचित लगता है? यदि हाँ — तो आप अकेले नहीं हैं। Stack Overflow पर इस प्रश्न के लाखों व्यूज़ हैं और यह शुरुआती Java डेवलपर्स की त्रुटियों में सबसे आम है। अच्छी खबर: इसका कारण लगभग हमेशा सामान्य होता है, और समाधान में 30 सेकंड लगते हैं। बुरी खबर: यदि आप यह नहीं समझते कि ऐसा क्यों हुआ, तो यह त्रुटि बार-बार आपका पीछा करेगी।
\n\nइस लेख में हम विशिष्ट उदाहरणों के साथ «Could not find or load main class» के सभी संभावित कारणों का विश्लेषण करेंगे। आप न केवल त्रुटि को ठीक करना सीखेंगे, बल्कि यह भी समझेंगे कि Java आपकी क्लास को कैसे खोजता है। चलिए शुरू करते हैं!
\n\nसंक्षेप में मुख्य बात: JVM क्या कहना चाह रहा है?
\n\nजब आप java ClassName लिखते हैं, तो Java वर्चुअल मशीन (JVM) को आदेश मिलता है: «इस नाम की क्लास ढूंढो और उसका main मेथड चलाओ»। यदि JVM को सही नाम वाली .class फ़ाइल नहीं मिलती या उसमें सही main मेथड नहीं मिलता, तो वह घबरा जाती है और यह त्रुटि देती है।
यह समझना महत्वपूर्ण है: Java बाइटकोड (.class फ़ाइलों) के साथ काम करता है, न कि सोर्स कोड (.java) के साथ। आप पहले javac कमांड से .java को .class में कंपाइल करते हैं, फिर java कमांड से .class को चलाते हैं। यदि दूसरे चरण में कुछ गलत होता है — तो आपको यह त्रुटि मिलती है।
परिदृश्य 1: आप फ़ाइल को कंपाइल करना भूल गए
\n\nसबसे आम कारण, खासकर उन लोगों के लिए जिन्होंने अभी टर्मिनल खोला है। आप लिखते हैं:
\n\njava HelloWorld\n\nलेकिन इससे पहले यह नहीं किया:
\n\njavac HelloWorld.java\n\nकंपाइलेशन के बिना, HelloWorld.class फ़ाइल मौजूद ही नहीं होती। JVM ईमानदारी से इसे खोजने की कोशिश करता है, लेकिन नहीं पाता और त्रुटि देता है।
कैसे जाँचें?
\n- \n
- वर्तमान फ़ोल्डर में देखें: क्या
HelloWorld.classफ़ाइल मौजूद है? \n - यदि केवल
HelloWorld.javaहै — तो कंपाइल करें। \n - यदि दोनों में से कोई नहीं है — तो जाँचें कि आप सही डायरेक्टरी में हैं या नहीं। \n
परिदृश्य 2: क्लास नाम में टाइपिंग की गलती (केस मायने रखता है!)
\n\nJava एक सख्त टाइपिंग वाली भाषा है और केस-सेंसिटिव है। यदि आपकी क्लास का नाम HelloWorld है, और आप लिखते हैं:
java helloworld\njava HelloWorld.class\njava HelloWorld.java\n\n— JVM आपको नहीं समझेगा। क्लास का नाम फ़ाइल के नाम से हर अक्षर तक मेल खाना चाहिए। हाँ, HelloWorld और helloworld JVM के लिए अलग-अलग नाम हैं।
java कमांड में कभी .class या .java न लिखें। केवल क्लास का साफ़ नाम लिखें!\nपरिदृश्य 3: पैकेज (package) से संबंधित समस्याएँ (सबसे धोखेबाज जाल)
\n\nजैसे ही आप पैकेज (package) का उपयोग करना शुरू करते हैं, खेल के नियम बदल जाते हैं। मान लीजिए, आपके पास एक फ़ाइल है:
\n\n// फ़ाइल: src/com/pythonlib/MyApp.java\npackage com.pythonlib;\n\npublic class MyApp {\n public static void main(String[] args) {\n System.out.println("PythonLib से नमस्ते!");\n }\n}\n\nकई शुरुआती ऐसा करते हैं:
\n\ncd src\njavac com/pythonlib/MyApp.java // कंपाइलेशन सफल\njava MyApp // त्रुटि!\n\nक्यों? क्योंकि अब क्लास का पूरा नाम com.pythonlib.MyApp है, न कि केवल MyApp। JVM पूरे नाम से क्लास खोजता है।