Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Java

जावा में क्लास मौजूद होने पर हमें ClassNotFoundException क्यों मिलता है?

जब भी हम किसी वर्ग को लोड करने का प्रयास करते हैं, यदि क्लास लोडर निर्दिष्ट पथ पर कक्षा को खोजने में सक्षम नहीं है 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.........

  1. Java में Cursor क्लास का क्या महत्व है?

    A कर्सर ऑब्जेक्ट . का उपवर्ग है वर्ग और इसे बिंदु या संकेतक . के रूप में परिभाषित किया जा सकता है स्क्रीन पर। एक कर्सर सिस्टम से इनपुट का चयन करने के लिए प्रयोग किया जाता है जिसे उपयोगकर्ता माउस . के साथ संचालित करता है . कर्सर . में उपलब्ध विभिन्न प्रकार के कर्सर वर्ग हैं DEFAULT_CURSOR, CROSSH

  1. कंस्ट्रक्टर का नाम जावा में क्लास के नाम के समान क्यों है?

    हर क्लास ऑब्जेक्ट एक ही नए कीवर्ड का उपयोग करके बनाया जाता है, इसलिए इसमें उस क्लास के बारे में जानकारी होनी चाहिए जिससे उसे ऑब्जेक्ट बनाना चाहिए। इस कारण से, कंस्ट्रक्टर का नाम वर्ग के नाम के समान होना चाहिए। उदाहरण class MyConstructor{    public MyConstructor() {       Sys

  1. विंडोज 10 में रजिस्ट्री में बदलाव कब सेव होते हैं और क्यों?

    जब आप मैन्युअल रूप से Windows रजिस्ट्री में परिवर्तन करते हैं या जब किसी सॉफ़्टवेयर या डिवाइस ड्राइवर की स्थापना या स्थापना रद्द करने के दौरान Windows रजिस्ट्री में परिवर्तन किए जाते हैं, तो Windows 10 या Windows सर्वर रजिस्ट्री में तुरंत परिवर्तन नहीं करता है। रजिस्ट्री में परिवर्तन कब सहेजे जाते