जब भी हम किसी वर्ग को लोड करने का प्रयास करते हैं, यदि क्लास लोडर निर्दिष्ट पथ पर कक्षा को खोजने में सक्षम नहीं है ClassNotFoundException उत्पन्न होता है।
यह जावा प्रोग्राम को निष्पादित करते समय हो सकता है, स्पष्ट रूप से forName() . का उपयोग करके एक वर्ग लोड कर रहा है क्लास या loadClass() . नामक वर्ग की विधि ClassLoader वर्ग की विधि। ये दो वर्ग वर्ग के नामों का प्रतिनिधित्व करने वाले स्ट्रिंग मानों को स्वीकार करते हैं और निर्दिष्ट वर्गों को लोड करते हैं।
इन विधियों को कक्षा के नाम देते समय आपको यह सुनिश्चित करना होगा कि -
-
आप इन विधियों के लिए जिन वर्ग नामों को पास करते हैं, वे सटीक होने चाहिए।
-
निर्दिष्ट वर्ग (पैकेज के साथ) या तो वर्तमान निर्देशिका में होना चाहिए या, इसका पथ पर्यावरण चर वर्गपथ में सूचीबद्ध होना चाहिए।
उदाहरण
मान लें कि हमने नमूना . नामक एक वर्ग बनाया है निर्देशिका में D:// और नीचे दिखाए अनुसार संकलित -
package myPackage.example; public class Sample { static { System.out.println("The class named Sample loaded successfully........."); } }
संकलन
D:\>javac -d . Sample.java
यह वर्तमान निर्देशिका myPackage.example में एक पैकेज बनाएगा और .class . उत्पन्न करेगा नमूना . की फ़ाइल इसमें कक्षा। इसलिए, इस वर्ग को लोड करते समय, आपको इसे उसी निर्देशिका में रखना होगा और पूर्ण वर्ग का नाम Class.forName() पास करना होगा। या, loadClass()
उदाहरण
public class ClassNotFoundExample { public static void main(String args[]) { try { Class.forName("myPackage.exampl.Sample"); }catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }
अपवाद
उपरोक्त प्रोग्राम को निष्पादित करने पर, चूंकि पैकेज के नाम की वर्तनी गलत है, इसलिए आपको निम्न अपवाद मिलेगा।
D:\>java ClassNotFoundExample java.lang.ClassNotFoundException: myPackage.exampl.Sample at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at ClassNotFoundExample.main(ClassNotFoundExample.java:4)पर
यदि आप किसी अन्य निर्देशिका से किसी विशेष वर्ग तक पहुँचने का प्रयास कर रहे हैं, तो आपको −
. के लिए वर्ग पथ निर्धारित करने की आवश्यकता है-
फ़ोल्डर (सबसे बाहरी पैकेज) जिसमें .class फ़ाइल है।
या,
-
वर्ग युक्त जार फ़ाइल।
मान लीजिए, हमने वर्तनी की समस्या को ठीक कर दिया है और एक जावा फ़ाइल से कक्षा को लोड करने का प्रयास कर रहे हैं जो निर्देशिका E://
में है।उदाहरण
public class ClassNotFoundExample { public static void main(String args[]) { try { Class.forName("myPackage.example.Sample"); }catch (ClassNotFoundException ex) { ex.printStackTrace(); } } }
अपवाद
फिर भी आपको वही अपवाद मिलता है क्योंकि निर्दिष्ट वर्ग (या जार फ़ाइल युक्त) की .class फ़ाइल वाला पैकेज न तो वर्तमान निर्देशिका में है और न ही पर्यावरण चर वर्गपथ में पथों की सूची में है।
E:\>java ClassNotFoundExample java.lang.ClassNotFoundException: myPackage.example.Sample at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) at java.base/java.lang.ClassLoader.loadClass(Unknown Source) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Unknown Source) at ClassNotFoundExample.main(ClassNotFoundExample.java:4)पर
वर्तमान परिदृश्य में उस निर्देशिका के लिए वर्ग पथ सेट करें जिसमें आवश्यक वर्ग अर्थात “D:// वाले पैकेज हों। " और उपरोक्त जावा प्रोग्राम को निष्पादित करें, इसे काम करने के लिए।
E:\>javac ClassNotFoundExample.java E:\>java ClassNotFoundExample The class named Sample loaded successfully.........