ত্রুটি 'প্রধান ক্লাস খুঁজে পাওয়া বা লোড করা যায়নি৷ টার্মিনালে ক্লাসের নাম উল্লেখ করে একটি জাভা প্রোগ্রাম চালু করার জন্য কমান্ড প্রম্পটে একটি জাভা কমান্ড ব্যবহার করার সময় ঘটে। এটি হওয়ার কারণ বেশিরভাগই ক্লাস ঘোষণা করার সময় ব্যবহারকারীর প্রোগ্রামিং ভুলের কারণে।
যেমন আগে উল্লিখিত হয়েছে, এই ত্রুটিটি বেশিরভাগই সিস্টেমের সাথে সম্পর্কিত নয় এবং ব্যবহারকারী নীচে দেখানো হিসাবে বিভিন্ন পরিস্থিতিতে ভুল করে। এগিয়ে যাওয়ার আগে, আমরা ধরে নিই যে আপনার জাভা প্রোগ্রামিং ভাষা এবং এটি কীভাবে কাজ করে সে সম্পর্কে প্রাথমিক জ্ঞান রয়েছে৷
জাভাতে 'প্রধান ক্লাস খুঁজে পাওয়া বা লোড করা যায়নি' ত্রুটির কারণ কী?
'প্রধান ক্লাস খুঁজে পাওয়া যায়নি বা লোড করা যায়নি' বার্তাটির অর্থ হল জাভা ইঞ্জিনের প্রথম ধাপটি এক্সিকিউশনের জন্য ক্লাস আনয়ন করা ব্যর্থ হয়েছে। java কমান্ড লোকেটে সক্ষম হয়নি৷ সঠিক ডিরেক্টরিতে ক্লাস।
কিছু ক্ষেত্রে, আপনাকে সঠিক ফাইল পাথ যোগ করতে হবে এবং জাভা টার্মিনালটিকে সঠিক অবস্থানে নির্দেশ করুন। যেহেতু আপনি কমান্ড লাইন টার্মিনাল থেকে কমান্ডটি চালাচ্ছেন, কম্পিউটারটি জানে না যে ক্লাসটি কোথায় পাওয়া যাবে বা এটি কোথায় অবস্থিত। টার্গেটেড IDE-এ, এটি সমস্যা নয় কারণ IDE বর্তমান কার্যকারী ডিরেক্টরির দিকে নির্দেশ করে একটি পয়েন্টার রাখে৷
'java ' সিনট্যাক্স কি?
এক্সিকিউট করার চেষ্টা করার সময় টার্মিনাল কেন আমাদের একটি ত্রুটি ফেরত দিচ্ছে তা সমস্যা সমাধান শুরু করার আগে, প্রথমে আমাদের কমান্ডের সিনট্যাক্স দেখতে হবে। আপনি যদি সঠিক সিনট্যাক্স ব্যবহার না করেন তবে আপনি অনিবার্যভাবে এই ত্রুটির মুখোমুখি হবেন৷
কমান্ডের স্বাভাবিক সিনট্যাক্স এরকম কিছু:
java [ <option> ... ] <class-name> [<argument> ...]
এখানে
একটি বৈধ কমান্ডের উদাহরণ হল:
java -Xmx100m com.acme.example.ListAppuals kevin arrows bart
উপরের কমান্ডটি জাভা কমান্ডকে নিম্নলিখিত ক্রিয়াকলাপগুলি সম্পাদন করতে বাধ্য করবে:
- এটি ক্লাসের একটি সংকলিত সংস্করণ অনুসন্ধান করবে ‘com.acme.example.ListAppuals '।
- অনুসন্ধানের পর, এটি ক্লাস লোড করবে।
- এরপর, যখন ক্লাসটি লোড করা হয়, তখন ক্লাসটিকে একটি বৈধ স্বাক্ষর, পরিবর্তনকারী এবং রিটার্ন টাইপ সহ একটি 'প্রধান' পদ্ধতি অনুসন্ধান করা হবে। একটি নমুনা প্রধান ক্লাস এরকম কিছু হবে:
public static void main(String[])
- পদ্ধতিটিকে 'কেভিন', 'তীর' এবং 'বার্ট' স্ট্রিং হিসাবে আর্গুমেন্ট দিয়ে ডাকা হবে[]।
কিভাবে 'মেইন ক্লাস খুঁজে পাওয়া যায়নি বা লোড করা যায়নি'
ঠিক করবেনসমাধান 1:ক্লাসের নাম আর্গুমেন্ট চেক করা হচ্ছে
ব্যবহারকারীরা সবচেয়ে সাধারণ ভুল করে যে তারা একটি যুক্তি হিসাবে একটি ভুল শ্রেণীর নাম প্রদান করে (বা একটি সঠিক শ্রেণীর নাম একটি ভুল ফর্ম)। যেহেতু আমরা কমান্ড লাইনে পরামিতি ঘোষণা করছি, তাই খুব সম্ভবত আপনি ক্লাসের নাম যুক্তিটি ভুল আকারে পাস করবেন। এখানে আমরা সমস্ত সম্ভাব্য পরিস্থিতির তালিকা করব যেখানে আপনি ভুল করতে পারেন৷
৷- একটি সরল ক্লাসের নাম লেখা . আপনি যদি 'com.acme.example'-এর মতো প্যাকেজে ক্লাস ঘোষণা করেন, তাহলে আপনাকে অবশ্যই পূর্ণ শ্রেণির নাম ব্যবহার করতে হবে জাভা কমান্ডে প্যাকেজ সহ।
java com.acme.example.ListAppuals
পরিবর্তে
java ListAppuals
- আপনাকে একটি শ্রেণির নাম ঘোষণা করা উচিত একটি ফাইলের নাম বা পথনাম ঘোষণা করার পরিবর্তে। আপনি যদি এটির জন্য একটি পাথনাম/ফাইল নাম ঘোষণা করেন তবে জাভা ক্লাসটি আনবে না। ভুল এন্ট্রি নিম্নলিখিত অন্তর্ভুক্ত:
java ListAppuals.class java com/acme/example/ListAppuals.class
- কেসিং বিবেচনায় নেওয়া উচিত। জাভা কমান্ডগুলি কেস সংবেদনশীল এবং আপনি যদি একটি অক্ষরও ভুল করেন তবে আপনি প্রধান ক্লাস লোড করতে সক্ষম হবেন না। ভুল ভুলের উদাহরণ হল:
java com.acme.example.listappuals
- আপনার উচিত নয় একটি উৎস ফাইলের নাম ঘোষণা করুন . আগে উল্লিখিত মত, আপনাকে শুধুমাত্র সঠিক পূর্ণ শ্রেণীর নাম বিন্যাসে ক্লাস ঘোষণা করতে হবে। ভুলের উদাহরণ হল:
java ListAppuals.java
- আপনি যদি টাইপিং ভুল করেন তাহলেও এই ত্রুটি ঘটবে অথবা ক্লাসের নাম সম্পূর্ণরূপে লিখতে ভুলবেন না .
আপনি যদি ক্লাসের নাম ঘোষণা করার সময় কোনো ঢালু ভুল করে থাকেন, তবে নিশ্চিত করুন যে আপনি এটি ঠিক করেছেন এবং তারপর প্রোগ্রামটি চালু করার চেষ্টা করুন৷
সমাধান 2:ক্লাসপথ চেক করা হচ্ছে
আপনি যদি সঠিকভাবে ক্লাসের নাম ঘোষণা করে থাকেন কিন্তু এখনও ত্রুটি দেখানো হয়, তাহলে জাভা কমান্ড পাথে নির্দিষ্ট শ্রেণির নাম খুঁজে পায়নি। ক্লাসপথ হল একটি পথ যেখানে জাভা রানটাইম রিসোর্স এবং ক্লাস ফাইলের জন্য অনুসন্ধান করে। নিচের মত দুটি ভিন্ন কমান্ড ব্যবহার করে আপনি সহজেই ক্লাসপথ সেট করতে পারেন:
C:> sdkTool -classpath classpath1;classpath2... C:> set CLASSPATH=classpath1;classpath2...
ক্লাসপাথ সম্পর্কে আরও অন্তর্দৃষ্টি পেতে, আপনাকে নিম্নলিখিত নথিগুলি পরীক্ষা করা উচিত।
জাভা কমান্ড ডকুমেন্টেশন
ক্লাসপাথ সেট করা হচ্ছে
সমাধান 3:চেকিং ডিরেক্টরি
আপনি যখন একটি ডিরেক্টরিকে ক্লাসপথ হিসাবে ঘোষণা করেন, তখন এটি সর্বদা নেমস্পেসের মূলের সাথে মিলে যায়। উদাহরণস্বরূপ যদি "/usr/local/acme/classes" ক্লাসপথে থাকে, তাহলে Java একটি ক্লাস "com.acme.example.Appuals" অনুসন্ধান করবে। এটি নিম্নলিখিত পথনাম সহ একটি ক্লাসের সন্ধান করবে:
/usr/local/acme/classes/com/acme/example/Appuals.class
তাই সংক্ষেপে, আপনি যদি ক্লাসপথে নিম্নলিখিত ঠিকানাটি রাখেন, জাভা ক্লাসটি খুঁজে পাবে না:
/usr/local/acme/classes/com/acme/example
আপনার সাবডিরেক্টরি ও চেক করা উচিত এবং দেখুন এটি FQN এর সাথে মেলে কিনা। যদি আপনার ক্লাস FQN হয় "com.acme.example.Appuals", তাহলে Java "com/acme/example" ডিরেক্টরিতে একটি "Appuals.class" অনুসন্ধান করবে।
আপনাকে একটি উদাহরণ দিতে, আসুন নিম্নলিখিত দৃশ্যকল্পটি ধরা যাক:
- আপনি যে ক্লাসটি চালাতে চান তা হল:com.acme.example.Appuals
- সম্পূর্ণ ফাইল পাথ হল:/usr/local/acme/classes/com/acme/example/Appuals.class
- বর্তমান কাজের ডিরেক্টরি হল:/usr/local/acme/classes/com/acme/example/
তারপর নিম্নলিখিত পরিস্থিতিতে থাকবে:
# wrong, FQN is needed java Appuals # wrong, there is no `com/acme/example` folder in the current working directory java com.acme.example.Appuals # wrong, similar to above scenario java -classpath . com.acme.example.Appuals # OK ; a relative classpath is set java -classpath ../../.. com.acme.example.Appuals # OK; an absolute classpath is set java -classpath /usr/local/acme/classes com.acme.example.Appuals
দ্রষ্টব্য: ক্লাসপাথকে অন্যান্য সমস্ত ক্লাস (নন-সিস্টেম) অন্তর্ভুক্ত করতে হবে যা আপনার অ্যাপ্লিকেশনগুলির প্রয়োজন৷
সমাধান 4:ক্লাস প্যাকেজ চেক করা হচ্ছে
উপরের সমস্ত সমাধান আপনার ক্ষেত্রে সত্য হলে, আপনাকে নিশ্চিত করতে হবে যে আপনার সোর্স কোডটি সঠিক ফোল্ডারে রাখা হয়েছে। এছাড়াও, আপনি সঠিকভাবে প্যাকেজ ঘোষণা করেছেন . আপনি যদি একটি IDE দিয়ে আপনার কোড চালান, তাহলে সম্ভবত এটি আপনাকে সমস্যা সম্পর্কে অবহিত করবে। যাইহোক, আমাদের ক্ষেত্রে, যেহেতু আমরা এটিকে কমান্ড প্রম্পটে চালাচ্ছি, তাই ভুলটি নজরে পড়বে না এবং আপনি আলোচনার অধীনে ক্লাস ত্রুটিটি পাবেন৷