মেইন ক্লাস জাভা খুঁজে পাওয়া বা লোড করা যায়নি? এটি ঠিক করার উপায় এখানে!

যদি আপনি কোনও আপাত কারণে আপনার জাভা প্রকল্পে মুখ্য শ্রেণীর ত্রুটি না পেয়ে থাকেন তবে চিন্তা করবেন না, আপনি একা নন।

সর্বাধিক অপ্রয়োজনীয় এবং স্বতঃস্ফূর্ত ত্রুটিগুলির মধ্যে একটি, জেভিএমের (জাভা ভার্চুয়াল মেশিন) একটি ডিফল্ট শ্রেণিপথের সাথে লেগে থাকার প্রবণতার জন্য, 'প্রধান শ্রেণীর সন্ধান পাওয়া যায় না' সমস্যাটি এমনই একটি বিষয় যা অপেশাদার এবং পেশাদারদের একইভাবে হান্ট করে।

তবে এই সমস্যাটি যতটুকু মনে হচ্ছে তত কম ভয় দেখায়। আপনি কীভাবে একবারে এবং সকলের জন্য এই ত্রুটি থেকে মুক্তি পেতে পারেন তা জানতে পড়ুন।

মূল শ্রেণি কেন পাওয়া গেল না?

জেভিএম কীভাবে এবং কেন মূল শ্রেণিটি খুঁজে পেল না তা বোঝার চেষ্টা করার আগে আমাদের জাভাতে ক্লাসপাথের ধারণাটি বুঝতে হবে।

ক্লাসপাথ কী?

ক্লাসপথ হল ফাইল পাথ যা জাভা রানটাইম পরিবেশটি ক্লাস এবং অন্যান্য সংস্থান ফাইলগুলির জন্য অনুসন্ধান করে। কোনও প্রোগ্রাম সঞ্চালনের সময় অথবা সিস্টেম CLASSPATH এনভায়রনমেন্ট ভেরিয়েবল সেট করে এটি ক্লাসপাথ বিকল্পটি ব্যবহার করে সেট করা যেতে পারে।

নাম অনুসারে, এটি কেবল একটি ফাইলের পথ যেখানে .class ফাইলগুলি JDK প্যাকেজ বা ডিরেক্টরিতে পাওয়া যাবে।

যখন জেভিএম মূল শ্রেণিটি সনাক্ত করতে অক্ষম হয়, এটি প্রায়শই কারণ এটি ভুল ক্লাসপথে সংশ্লিষ্ট। ক্লাস ফাইলগুলি অনুসন্ধান করে। অবশ্যই, এই সমস্যাটি সংশোধন করার উপায় হ'ল ম্যানুয়ালি প্যাকেজগুলি ব্যবহার করে বা ক্লাসপাথ নির্দিষ্ট করে ক্লাসপাথটি নির্দিষ্ট করা।

এই মুহুর্তে, আপনি যদি জাভা ক্লাসগুলির স্মৃতি সতেজ করতে চান তবে জাভাতে ক্লাস তৈরির জন্য আমাদের গাইড দেখুন।

প্যাকেজ ব্যবহার

টেস্ট নামে একটি ক্লাস তৈরি করা যাক। এটি টেস্টপ্যাকেজ নামে একটি প্যাকেজে রাখুন । একই ধরণের ক্লাসগুলিকে একসাথে গ্রুপবদ্ধ করতে বা ক্লাসগুলির জন্য একটি অনন্য নেমস্পেস সরবরাহ করতে প্যাকেজগুলি জাভাতে ব্যবহৃত হয়।

এই সাধারণ উদাহরণে, একটি প্যাকেজ ব্যবহার জাভার ক্লাসপাথ কীভাবে কাজ করে তা কল্পনা করতে সহায়তা করবে। আপনার ফাইল ম্যানেজার অ্যাপ্লিকেশনটিতে, একটি প্যাকেজটি একটি স্বাধীন ফোল্ডার হিসাবে উপস্থাপিত হয়।

 package testPackage;
public class Test {
public static void main(String args[]) {
System.out.println("File successfully found!");
}
}

এখন, একটি নতুন টার্মিনাল খুলুন এবং নিশ্চিত করুন যে আপনার ওয়ার্কিং ডিরেক্টরিটি প্যাকেজ ফোল্ডারটি সমেত একটির মতো। আপনি যে কোনও অপারেটিং সিস্টেমে সিডি কমান্ড ব্যবহার করে ওয়ার্কিং ডিরেক্টরিটি পরিবর্তন করতে পারেন।

নিম্নলিখিত কমান্ডটি চালিয়ে টেস্ট.জভা সংকলন করুন :

 package testPackage;
javac testPackage/Test.java

এটি পরীক্ষিত প্যাকেজে সংকলিত বাইনারি ফাইল (.class ফাইল) সংরক্ষণ করবে।

সংকলিত শ্রেণি চালানোর জন্য, আপনাকে কমান্ড লাইনে সম্পূর্ণ যোগ্যতাসম্পন্ন শ্রেণীর নাম টাইপ করতে হবে। একটি জাভা ক্লাসের 'সম্পূর্ণরূপে যোগ্য নামটি এর প্যাকেজটির নামের সাথে উপরিবর্তিত নামটিকে বোঝায়। এই ক্ষেত্রে, এটি এর মতো দেখতে হবে:

 java testPackage.Test

ক্লাস ফাইলগুলি কল করার এই পদ্ধতিটিও নিশ্চিত করে যে আপনি একই কার্যনির্বাহী ডিরেক্টরি থেকে বিভিন্ন প্যাকেজ থেকে এক্সিকিউটেবলকে কল করতে পারেন। আপনাকে যা করতে হবে তা হ'ল সম্পূর্ণ যোগ্যতাসম্পন্ন শ্রেণীর নাম পরিবর্তন করতে।

আরও উন্নত বাস্তবায়নে, আমরা আপনাকে প্যাকেজের মধ্যে ফাইলগুলি আরও ভালভাবে পরিচালনা করতে আপনার ক্লাস এবং উত্স ফাইলগুলির জন্য পৃথক সাবফোল্ডার তৈরি করার পরামর্শ দিচ্ছি।

ম্যানুয়ালি ক্লাসপাথ নির্দিষ্ট করা হচ্ছে

আপনার জাভা ফাইলগুলি পরিচালনা করার প্রস্তাবিত উপায় হ'ল উত্স ফাইল এবং শ্রেণীর জন্য পৃথক ডিরেক্টরি তৈরি করা। আপনি যদি কোনও প্রকল্পে কাজ করে থাকেন তবে সম্ভবত আপনি এটি ইতিমধ্যে করছেন।

সাধারণত, উৎস ফাইল ডিরেক্টরি src হিসাবে লেবেল করা এবং .class ফাইল এক শ্রেণীর হিসাবে লেবেল করা হয়। সঠিকভাবে কাঠামোগত ডিরেক্টরি হওয়ার কারণে জেভিএমের প্রধান শ্রেণীর সন্ধান না করার সম্ভাবনা উল্লেখযোগ্যভাবে হ্রাস পেয়েছে এটি নিশ্চিত করারও এটি একটি উপায়।

আমরা যদি এই পদ্ধতিটি ব্যবহার করি তবে সংকলনের আগে ডিরেক্টরি কাঠামোর মতো দেখতে এটিই:

 |---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes

উপরের চিত্রের প্রতিটি ইন্ডেন্ট ফাইলের স্তরক্রমের একটি স্তরের সাথে সামঞ্জস্য করে যা আপনার প্রকল্প অনুসরণ করা উচিত।

এটি সংকলন করার জন্য, নিশ্চিত হয়ে নিন যে আপনার ওয়ার্কিং ডিরেক্টরিটি আমার ফোল্ডার। এখন, নিম্নলিখিত কমান্ডটি টাইপ করুন:

 javac -d classes src/testPackage/Test.java

.ক্লাস এক্সিকিউটেবল মাইফোল্ডার / ক্লাস / টেস্টপ্যাকেজে সংরক্ষণ করা উচিত। তদনুসারে, ফাইল ডিরেক্টরি কাঠামোটি এরকম কিছু দেখায়:

 |---myFolder
| |---src
| |---testPackage
| |---Test.java
|
| |---classes
| |---testPackage
| |---Test.class

.Class ফাইলটি চালানোর জন্য, সম্পূর্ণ যোগ্যতাসম্পন্ন শ্রেণীর নাম দিয়ে জাভা কমান্ডটি চালান এবং স্থানীয় শ্রেণিপথ নির্দিষ্ট করুন। প্রতিটি পাথ কার্যকারী ডিরেক্টরি সম্পর্কিত যা ঘোষিত হয়, যা এই ক্ষেত্রে আমার ফোল্ডার।

 java -classpath classes testPackage

এই আদেশটি চালানো আপনার পছন্দসই আউটপুট দেয় give তবে, কেন একটি সাধারণ ত্রুটি সমাধানের জন্য এত পুনর্গঠনের প্রয়োজন?

জাভাতে ফাইলগুলি সংগঠিত করার গুরুত্ব

'মেইন ক্লাস ফাইন্ডিং বা লোড করা যায়নি' কেন খুব ছুঁড়ে ফেলা হয়েছে তার কারণ হ'ল জেভিএম আপনার .class ফাইলগুলি কোথায় সংরক্ষণ করছে তা সন্ধান করতে সক্ষম হয় নি।

এই ত্রুটিটি সমাধানের সহজতম উপায় হ'ল। ক্লাস ফাইলগুলি কোথায় সংরক্ষণ করা হয়েছে তা নিয়ন্ত্রণ করা এবং স্পষ্টভাবে JVM কে সেখানে দেখার জন্য বলুন। আপনার উত্স ফাইল এবং এক্সিকিউটেবলগুলি আলাদাভাবে সংগঠিত করে এবং একটি কার্যনির্বাহী ডিরেক্টরি থেকে সমস্ত কিছু নিয়ন্ত্রণ করে এটি সম্ভব হয়েছে।

আপনি যখন আপনার প্রকল্পে উত্তরাধিকার হিসাবে নির্মাণ যুক্ত শুরু করবেন, ফাইল সিস্টেম জটিলতা বহুগুণে বাড়তে বাধ্য। এই জাতীয় প্রকল্পগুলিতে বা এমনকি যেখানে জেআর ফাইলগুলি বা কাস্টম লাইব্রেরিগুলি প্রয়োজন সেখানে ফাইলগুলি পৃথকীকরণ ও পরিচালনা করার সহজ অনুশীলন আপনাকে অগণিত ঘন্টা সমস্যার সমাধান এবং ডিবাগিং বাঁচাতে পারে।

জাভাতে ক্লাসপাথ কীভাবে কাজ করে এবং আপনার কোডটি চালানোর ক্ষেত্রে আপনি নিয়ন্ত্রণ করতে পারেন এমন অসংখ্য বিষয় সম্পর্কে আরও জানতে, আপনি ওরাকলের বিস্তারিত এবং ব্যবহারকারী-বান্ধব রেফারেন্সটি একবার দেখে নিতে পারেন।