ClassNotFoundException একটি চেকড এক্সেপশন যা তখন নিক্ষেপ করা হয় যখন জাভা ভার্চুয়াল মেশিন (JVM) রানটাইমে একটি ক্লাস লোড করার চেষ্টা করে কিন্তু ক্লাসপথে সেই ক্লাসটি খুঁজে পায় না। এটি সাধারণত নিম্নলিখিত পরিস্থিতিতে ঘটে:
Class.forName()মেথড ব্যবহার করে ডাইনামিক্যালি ক্লাস লোড করার সময়ClassLoader.loadClass()মেথড ব্যবহার করার সময়- JDBC ড্রাইভার লোড করার সময় (যেমন
Class.forName("com.mysql.jdbc.Driver"))
প্রধান কারণসমূহ
- ভুল ক্লাস নাম বা প্যাকেজ নাম: スペルিং ভুল বা কেস-সেনসিটিভিটি সমস্যা।
- ক্লাসপথে ক্লাস অনুপস্থিত:
.classফাইল বা JAR ফাইল ক্লাসপথে নেই। - ভুল ডিরেক্টরি স্ট্রাকচার: প্যাকেজ ডিক্লেয়ারেশন ফাইল সিস্টেমের ফোল্ডার স্ট্রাকচারের সাথে মেলে না।
উদাহরণ: ভুল প্যাকেজ নাম
ধরুন 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:/এ)।