কম্পিউটার

যখন ক্লাসটি জাভাতে বিদ্যমান তখন কেন আমরা ClassNotFoundException পেতে পারি?


যখনই আমরা একটি ক্লাস লোড করার চেষ্টা করি, যদি ক্লাস লোডার নির্দিষ্ট পথে ক্লাসটি খুঁজে না পায় তাহলে একটি ClassNotFoundException তৈরি হয়।

জাভা প্রোগ্রাম চালানোর সময়, forName() ব্যবহার করে স্পষ্টভাবে একটি ক্লাস লোড করার সময় এটি ঘটতে পারে ক্লাস বা loadClass() নামের ক্লাসের পদ্ধতি ClassLoader ক্লাসের পদ্ধতি। এই দুটি ক্লাস ক্লাসের নামের প্রতিনিধিত্বকারী স্ট্রিং মান গ্রহণ করে এবং নির্দিষ্ট ক্লাস লোড করে।

এই পদ্ধতিতে ক্লাসের নাম পাস করার সময় আপনাকে নিশ্চিত করতে হবে যে −

  • আপনি এই পদ্ধতিতে পাস করা ক্লাসের নাম সঠিক হওয়া উচিত।

  • নির্দিষ্ট শ্রেণী (প্যাকেজ সহ) হয় বর্তমান ডিরেক্টরিতে থাকা উচিত অথবা, এর পাথ পরিবেশ পরিবর্তনশীল ক্লাসপথে তালিকাভুক্ত করা উচিত।

উদাহরণ

ধরে নিন আমরা Sample নামে একটি ক্লাস তৈরি করেছি 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. জাভাতে কার্সার ক্লাসের গুরুত্ব কী?

  2. কেন স্ট্রিং ক্লাস জাভাতে অপরিবর্তনীয় বা চূড়ান্ত?

  3. কনস্ট্রাক্টরের নাম জাভাতে ক্লাসের নামের মতো কেন?

  4. উইন্ডোজ 10 এ রেজিস্ট্রির পরিবর্তনগুলি কখন সংরক্ষিত হয় এবং কেন?