কম্পিউটার টিউটোরিয়াল

ক্লাস থাকা সত্ত্বেও জাভাতে ClassNotFoundException কেন হয়?

ClassNotFoundException একটি চেকড এক্সেপশন যা তখন নিক্ষেপ করা হয় যখন জাভা ভার্চুয়াল মেশিন (JVM) রানটাইমে একটি ক্লাস লোড করার চেষ্টা করে কিন্তু ক্লাসপথে সেই ক্লাসটি খুঁজে পায় না। এটি সাধারণত নিম্নলিখিত পরিস্থিতিতে ঘটে:

  • Class.forName() মেথড ব্যবহার করে ডাইনামিক্যালি ক্লাস লোড করার সময়
  • ClassLoader.loadClass() মেথড ব্যবহার করার সময়
  • JDBC ড্রাইভার লোড করার সময় (যেমন Class.forName("com.mysql.jdbc.Driver"))

প্রধান কারণসমূহ

  1. ভুল ক্লাস নাম বা প্যাকেজ নাম: スペルিং ভুল বা কেস-সেনসিটিভিটি সমস্যা।
  2. ক্লাসপথে ক্লাস অনুপস্থিত: .class ফাইল বা JAR ফাইল ক্লাসপথে নেই।
  3. ভুল ডিরেক্টরি স্ট্রাকচার: প্যাকেজ ডিক্লেয়ারেশন ফাইল সিস্টেমের ফোল্ডার স্ট্রাকচারের সাথে মেলে না।

উদাহরণ: ভুল প্যাকেজ নাম

ধরুন D:/ ডিরেক্টরিতে Sample.java ফাইল আছে যার প্যাকেজ myPackage.example।

package myPackage.example;
public class Sample {
    static {
        System.out.println("The class named Sample loaded successfully.........");
    }
}

কম্পাইল: javac -d . Sample.java (এটি D:/myPackage/example/Sample.class তৈরি করবে)।

এখন যদি ভুল প্যাকেজ নাম দিয়ে লোড করার চেষ্টা করা হয়:

public class ClassNotFoundExample {
    public static void main(String args[]) {
        try {
            Class.forName("myPackage.exampl.Sample"); // 'example' এর বদলে 'exampl'
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }
}

এক্সেপশন আউটপুট

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 ফাইল বা JAR ফাইল ক্লাসপথে আছে।
  • কমান্ড লাইনে রান করার সময় -cp বা -classpath অপশন দিয়ে ক্লাসপথ সেট করুন।
  • উদাহরণ: java -cp D:/ ClassNotFoundExample (যেহেতু প্যাকেজের রুট D:/ এ)।
  1. জাভাতে Cursor ক্লাসের গুরুত্ব

  2. জাভাতে String ক্লাস ইমিউটেবল বা ফাইনাল কেন

  3. জাভাতে কনস্ট্রাক্টরের নাম ক্লাসের নামের সাথে একই কেন

  4. উইন্ডোজ ১০-এ রেজিস্ট্রি পরিবর্তন কখন সংরক্ষিত হয় এবং কেন?