আমি ক্লাসনটফাউন্ডএক্সসেপশন কীভাবে সমাধান করব?


106

আমি জাভা অ্যাপ্লিকেশন চালানোর চেষ্টা করছি, তবে এই ত্রুটিটি পেয়েছি:

java.lang.ClassNotFoundException:

কোলন আসার পরে অনুপস্থিত শ্রেণীর অবস্থান আসবে। তবে, আমি জানি যে ক্লাসটি অন্য কোথাও অবস্থিত তাই সেই অবস্থানের অস্তিত্ব নেই। আমি কীভাবে সেই শ্রেণীর পথ আপডেট করতে পারি? শ্রেণীর পথের সাথে কি কিছু করার আছে?


1
আপনাকে অবশ্যই সেই জারটি যুক্ত করতে হবে যা ক্লাসপেটে অনুপস্থিত শ্রেণি রয়েছে
ক্রোম

যদি আপনার ক্লাসের একটি প্যাকেজ থাকে তবে ক্লাসটি ধারণ করে ফোল্ডারে যান। উদাহরণস্বরূপ, যদি প্যাকেজটি প্যাকেজ test.abc হয়, তবে পরীক্ষার আগে ফোল্ডারে যান এবং তারপরে জাভা-সিপি করুন। test.abc.CLASSNAME (.class ছাড়াই)। যদি কোনও প্যাকেজ না থাকে তবে ক্লাসযুক্ত ফোল্ডারে যান এবং জাভা-সিপি বলুন। Classname
ঐচ্ছিক

হয় আপনার রানটাইমে কোনও ক্লাস মোতায়েন করা হয়নি (উদাহরণস্বরূপ নিখোঁজ জার), বা শ্রেণি কোনও প্রদত্ত শ্রেণীর লোডারে দৃশ্যমান নয়, এই সরঞ্জামটি যা এই সমস্যাগুলি সমাধানে সহায়তা করে তা পরীক্ষা করে দেখুন: jades.org
কৌণিক বিশ্ববিদ্যালয়

1
আমি মাঝে মাঝে এই মধ্যে দৌড়ে। এই ব্যতিক্রম পরিষ্কারভাবে একটি ব্যতিক্রম বার্তায় সমস্ত প্রয়োজনীয় প্রসঙ্গটি উল্লেখ করার নিয়ম লঙ্ঘন করে। এটি কোথায় কোথায় জিনিসটি দেখার চেষ্টা করেছে, আপনার ক্লাসপথে কী রয়েছে তা উল্লেখ করা উচিত । দয়া করে আরও ভাল ব্যতিক্রম বার্তা করুন। আমাদের সমস্যার সমাধান করতে সহায়তা করতে পারে এমন তথ্যের খোঁজ না করে।
মাস্টারেক্সিলো

উত্তর:


32

আপনার ক্লাসপথটি ভেঙে গেছে (যা জাভা জগতের একটি খুব সাধারণ সমস্যা)।

আপনি কীভাবে আপনার অ্যাপ্লিকেশনটি শুরু করেন তার উপর নির্ভর করে আপনাকে -cpMANIFEST.MF বা আপনার ডিস্ক বিন্যাসে আপনার ক্লাস-পাথ এন্ট্রিতে যুক্তিটি সংশোধন করতে হবে ।


34
আপনি কি আরও বেশি গ্রহ নির্দিষ্ট করতে পারবেন? আমাকে কি করতে হবে?
ব্যবহারকারী 2426316

24
আপনার প্রশ্নে আরও নির্দিষ্ট উত্তর দেওয়ার জন্য পর্যাপ্ত তথ্য নেই। যোগ করার বিষয়টি বিবেচনা করুন।
থরবজর্ন রাভন অ্যান্ডারসন

নির্ভরশীলতা রেজোলিউশন / সংস্করণ মেলে না মূলত সমস্ত প্রোগ্রামিং পরিবেশে খুব সাধারণ সমস্যা। আমরা বলতে পারি যে কোনও প্রোগ্রামই যেভাবে করেন তা হ'ল এই সংজ্ঞাগুলি সমাধান করা ... প্রশ্ন সর্বদা প্রশ্ন / সংজ্ঞাটি কোনটি এবং আপনি কোন সংস্করণটি বোঝাতে চেয়েছিলেন?
মাস্টারেক্সিলো

2
আমি কেবল জোর দিয়ে বলছি যে জাভা বিশ্ব ছাড়াও সমস্ত সফ্টওয়্যারের একটি নির্ভরতা রয়েছে যে নির্ভরতাগুলির সঠিক সংস্করণগুলি পাওয়া যায় uring আমি এই সমস্যা এবং সম্ভাব্য সমাধানের উদাহরণ হিসাবে dll-Hell, প্যাকেজ ম্যানেজার, সংস্করণ পরিচালক, উপকরণগুলির বসন্ত বুট বিল এবং ডকারের পাত্রে উল্লেখ করতে পারি। বিদেশী কোডের ভগ্নাংশটি যত বড় সমস্যাটি তত বড় আকার ধারণ করে।
মাস্টারেক্সিলো

@ মাস্টারেক্সিলো হ্যাঁ, তবে এখানে সমস্যাটি অগত্যা নয় এবং আপনি সম্ভবত ভুল গাছটি ছাঁটাই করছেন। এতটুকুই বলা যায় যে ক্লাসপথটি ভেঙে গেছে।
থর্বজর্ন রাভন অ্যান্ডারসন

45

ক্লাসপথটি ক্লাস লোড করার জন্য অবস্থানগুলির একটি তালিকা।

এই 'অবস্থানগুলি' হয় ডিরেক্টরি, বা জার ফাইল হতে পারে।

ডিরেক্টরিগুলির জন্য, JVM কোনও শ্রেণি লোড করার জন্য একটি প্রত্যাশিত প্যাটার্ন অনুসরণ করবে। যদি আমি ডিরেক্টরির আছে / myproject / ক্লাস: সি আমার ক্লাসপাথ মধ্যে, এবং আমি একটি বর্গ লোড করার প্রচেষ্টা করা com.mycompany.Foo এটি একটি ডিরেক্টরির নামক ক্লাস ডিরেক্টরি অধীনে দেখবে, কম তারপর অধীনে একটি ডিরেক্টরি নামক mycompany , এবং শেষ পর্যন্ত এটি ডিরেক্টরিতে Foo.class নামক একটি ফাইল সন্ধান করবে ।

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

সুতরাং জেভিএম ক্লাস সংজ্ঞা লোড করার চেষ্টা করার সময় ক্লাসের সংজ্ঞা সন্ধানের জন্য শেষ থেকে শুরু করে একটি শ্রেণিপথকে অনুসরণ করে। উদাহরণস্বরূপ, ক্লাসপথে:

সি: / myproject / শ্রেণীর; সি: /myproject/lib/stuff.jar; সি: /myproject/lib/otherstuff.jar

জেভিএম প্রথমে ডিরেক্টরি ক্লাসগুলি অনুসন্ধান করার চেষ্টা করবে , তারপরে স্টাফ.জারে এবং অবশেষে otherstuff.jar এ

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

আপনি জাভা-সিপি এবং তারপরে আপনার ক্লাসপাথ বলে কমান্ড লাইনে একটি শ্রেণিপথ সংজ্ঞায়িত করেন । Eclipse এর মতো আইডিইতে আপনার ক্লাসপথটি নির্দিষ্ট করার জন্য আপনার কাছে একটি মেনু বিকল্প থাকবে।


13

এটি আমি এখনও অবধি খুঁজে পাওয়া সেরা সমাধান

ধরুন আমাদের কাছে org.mypackageক্লাস যুক্ত একটি প্যাকেজ রয়েছে :

  • হ্যালো ওয়ার্ল্ড (প্রধান শ্রেণি)
  • SupportClass
  • UtilClass

এবং এই প্যাকেজটি সংজ্ঞায়িত করা ফাইলগুলি শারীরিকভাবে ডিরেক্টরিতে D:\myprogram(উইন্ডোজে) বা /home/user/myprogram(লিনাক্সে) সংরক্ষণ করা হয়।

ফাইলের কাঠামোটি এর মতো দেখাবে: এখানে চিত্র বর্ণনা লিখুন

আমরা যখন জাভা ডাকা, আমরা অ্যাপ্লিকেশন চালানোর জন্য নাম উল্লেখ করুন: org.mypackage.HelloWorld। তবে আমাদের জাভাটি অবশ্যই আমাদের প্যাকেজ সংজ্ঞায়িত ফাইল এবং ডিরেক্টরিগুলির সন্ধান করতে হবে তা অবশ্যই বলতে হবে। সুতরাং প্রোগ্রামটি চালু করতে, আমাদের নিম্নলিখিত কমান্ডটি ব্যবহার করতে হবে: এখানে চিত্র বর্ণনা লিখুন

দ্রষ্টব্য:java আপনার বর্তমান অবস্থানটি নির্বিশেষে আপনাকে উপরের কমান্ডটি কার্যকর করতে হবে। তবে এটি ক্ষেত্রে নয় javac। সংকলনের জন্য আপনি নিজের ডিরেক্টরিতে সরাসরি যেতে পারেন যেখানে আপনার .javaফাইল রয়েছে এবং সরাসরি সম্পাদন করতে পারেন javac ClassName.java


6

আপনি যদি ক্লাসের ক্লাসের পথ বা ক্লাসটি যুক্ত জারটি জানেন তবে তা চালানোর সময় এটি আপনার ক্লাসপথে যুক্ত করুন। এখানে উল্লিখিত হিসাবে আপনি ক্লাসপাথটি ব্যবহার করতে পারেন:

উইন্ডোজে

java -classpath .;yourjar.jar YourMainClass

ইউনিক্স / লিনাক্সে

java -classpath .:yourjar.jar YourMainClass

4

আপনি যদি মাভেন ব্যবহার করেন তবে এগুলি ব্যবহার করে দেখুন। আমি আমার প্রকল্পের জন্য মাভেন ব্যবহার করি এবং কখন করিmvn clean install কোনও প্রোগ্রাম চালানোর চেষ্টা করি তখন ব্যতিক্রম ছোঁড়ে। সুতরাং, আমি প্রকল্পটি পরিষ্কার করি এবং এটি আবার চালিত করি এবং এটি আমার পক্ষে কাজ করে।

আমি গ্রহন আইডিই ব্যবহার করি।

জুনিট পরীক্ষা চলাকালীন ক্লাস পাওয়া যায় নি ব্যতিক্রমের জন্য, mvn clean testএকবার চালানোর চেষ্টা করুন । এটি সমস্ত পরীক্ষা ক্লাস সংকলন করবে।


আপনি "এমভিএন ক্লিন টেস্ট" দৌড়ানোর সময় আপনি কোন ডিরেক্টরিতে ছিলেন? এটি কি POM এর মতো একই ডিরেক্টরিতে রয়েছে?
TacoB0t

1
হ্যাঁ. Pom ফাইল উপস্থিত থাকে সেই ডিরেক্টরি থেকে এটি চালান।
অরুণ ২

3

কমান্ড লাইন এর মাধ্যমে আপনার ক্লাসপাথ করার জন্য একটি ক্লাসের অবস্থান জুড়তে কেবল যোগ -cpবা -classpathএবং ক্লাস অবস্থান যখন এটি চলছে। আই ই

java -cp "c:/location/of/file" YourProgram

অথবা আপনি যদি একটি আইডিই চালাচ্ছেন যেমন গ্রহনের মতো আপনি ডানদিকে ক্লিক করতে পারেন project -> build path -> configure build path এবং আপনার শ্রেণি সহ বহিরাগত জেআরটি বিল্ড পাথটিতে যুক্ত করতে পারেন তবে এটি ঠিক কাজ করা উচিত।


3

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


5
এটি উইন্ডোতে (সেমিকোলন), ইউনিক্স / লিনাক্সে এটি ':' (কোলন)
জোব্লেড

3

যোগ সম্পূর্ণ পথ বয়াম ফাইলের CLASSPATH করতে। লিনাক্স ব্যবহারে:export CLASSPATH=".:/full/path/to/file.jar:$CLASSPATH"। অন্য উপায়ে কাজ করা হয়েছে (CLASSPATH সম্পাদনা না করে) বর্তমান প্রকল্প ফোল্ডারে জারটি আনজিপিং করছে।

উপায়গুলি আমার পক্ষে কার্যকর হয়নি:

1) -cpজার ফাইলের পুরো পথ সহ বিকল্প ব্যবহার করা ।

2) -cpবর্তমান ফোল্ডারে অবস্থিত হলে কেবল জারের নাম ব্যবহার করে

3) বর্তমান প্রকল্প ফোল্ডারে জারটি অনুলিপি করা

৪) জাভা জারের মানক স্থানে জারটি অনুলিপি করা (/ ইউএসআর / শেয়ার / জাভা)

এই সমাধানটি ক্লাস com.mysql.jdbc.Driver এর জন্য মাইএসকিএল-সংযোজক-জাভা 5 - *। জারে, ওপেনজেডিকে সংস্করণ 1.7 সহ লিনাক্সে কাজ করার জন্য রিপোর্ট করা হয়েছে



2

উপরে যান এবং আমদানি বিবৃতি যদি থাকে তবে অপসারণ করুন এবং শ্রেণিটি পুনরায় আমদানি করুন। তবে যদি তা না হয় তবে একটি পরিষ্কার করুন build আপনি কি নেটবিন বা গ্রহণ গ্রহণ করছেন?


2

আমি এটির মধ্যে দৌড়েছি এবং অন্যান্য সমাধানগুলির সমস্ত চেষ্টা করেছি। আমার এইচটিএমএল ফোল্ডারে আমার কাছে .class ফাইল ছিল না, আমার কাছে কেবল। জাভা ফাইল ছিল। আমি একবার ক্লাস ফাইল যুক্ত করে প্রোগ্রামটি ভাল কাজ করে।


2
  1. আপনার ক্লাসপথটি সঠিক না হলে এটি ঘটতে পারে

  2. আসুন আমরা একই প্রকল্পের নামের অধীনে একটি সিরিয়ালীকরণযোগ্য ক্লাস এবং deserializable শ্রেণীর পোস্ট করি। আপনি নির্দিষ্ট ফোল্ডারে সিরিয়ালাইজযোগ্য অবজেক্ট তৈরি করে সিরিয়ালাইজেবল ক্লাস চালান। এখন আপনার ডিসারিয়ালাইজড ডেটা দরকার। ইতিমধ্যে আপনি যদি প্রকল্পটির নাম পরিবর্তন করেন তবে এটি কার্যকর হবে না। আপনাকে প্রথমে সিরিয়ালাইজযোগ্য ক্লাস চালাতে হবে এবং তারপরে ফাইলটি ডিসরিয়ালাইজ করতে হবে।


2

আপনি যদি ম্যাভেন ব্যবহার করছেন তবে সমস্ত প্রকল্প আপডেট করার চেষ্টা করুন এবং স্ন্যাপশটের জন্য বল প্রয়োগ করুন। এটি পাশাপাশি পরিষ্কার করে সমস্ত ক্লাসপথ পুনর্নির্মাণ করবে .. এটি আমার সমস্যার সমাধান করেছে ..


2

আমি করেছি

1.অনুষ্ঠানিক ক্যাশে এবং পুনরায় চালু করুন

২. আমার প্রকল্পটি পুনর্নির্মাণ করুন যা সমস্যার সমাধান করেছে


1

আমি Processক্লাস ব্যবহার করে সি # কোড থেকে .জার চালানোর চেষ্টা করছিলাম । জাভা কোডটি গ্রহন থেকে সাফল্যের সাথে চলেছিল তবে এটি সি # ভিজ্যুয়াল স্টুডিও থেকে আসে না এবং এমনকি জার ফাইলে সরাসরি ক্লিক করেও এটি সর্বদা ClassNotFoundException:ব্যতিক্রম সহ বন্ধ হয়ে যায় । আমার জন্য সমাধান, জাভা প্রোগ্রামটি "JAR ফাইল" এর পরিবর্তে "চলমান জেআর ফাইল" হিসাবে রফতানি করে। আশা করি এটি কাউকে সাহায্য করতে পারে।


1

জাভা আপডেটের পরে উইন্ডোজটিতে এটি ঘটতে পারে যেখানে জাভা এসডিকে পুরানো সংস্করণটি অনুপস্থিত এবং একটি নতুন উপস্থিত রয়েছে। আপনার আইডিই ইনস্টল করা জাভা এসডিকে সংস্করণটি ব্যবহার করছে কিনা তা আমি পরীক্ষা করব (ইন্টেলিজ: সিটিআরএল + শিফট + অল্ট + এস)


1

আপনি যদি একাধিক (তৃতীয় পক্ষ) ** গ্রন্থাগার এবং প্রসারিত ** অ্যাপ্লিকেশন যুক্ত করেছেন ক্লাস যুক্ত করেছেন

তারপরে এটি ঘটতে পারে।

তার জন্য, আপনাকে multiDexEnabled trueআপনার বর্ধিত Applicationশ্রেণিটি সেট এবং প্রতিস্থাপন করতে হবেMultiDexApplication

এটি সমাধান করা হবে।


1

বেসিক জেনেরিক প্রশ্ন - সহজ জেনারিক উত্তর;)

তথ্য প্রদত্ত আমি এই ধারণাটি করব যে আপনি কিছু সহজ পাঠ্য সম্পাদক এবং কিছু কমান্ড শেল ব্যবহার করে "হ্যালো ওয়ার্ল্ড" এর মতো একটি সাধারণ কনসোল অ্যাপ্লিকেশন কোডিং, বিল্ডিং / সংকলন এবং পরিচালনা করার জন্য একটি প্রাথমিক পদ্ধতির চেষ্টা করছেন।

এই ত্রুটি পতিত পরিস্থিতিতে ঘটে:

..\SomePath>javac HelloWorld.java
..\SomePath>java HelloWorld.class

অন্য কথায়, ব্যবহার করুন:

..\SomePath>java HelloWorld

পিএস ফাইল এক্সটেনশন। ক্লাস যুক্ত করে একই ভুল তৈরি করে। অপারেটিং সিস্টেমের এনভায়রনমেন্ট ভেরিয়েবলসের প্যাথ-এ জাভা-র (জেডিকে / জেআরই) বিন ফোল্ডারটিও রয়েছে তা নিশ্চিত হয়ে নিন details


1

আপনি যদি মাভেন ব্যবহার করেন তবে আপনার এই প্লাগইনটি এতে রয়েছে কিনা তা পরীক্ষা করুন pom.xml:

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.0</version>
                <executions>
                    <!-- Attach the shade goal into the package phase -->
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

এটি আপনার জারে আপনার নির্ভরতা (ব্যতিক্রম কারণ) রাখবে।

এফওয়াইআই : এটিতে চূড়ান্ত জারে স্ফীত সমস্ত নির্ভরতা অন্তর্ভুক্ত থাকবে


পছন্দ করেছেন
টেককুজ

0

আমার ক্ষেত্রে ক্লাস হিসাবে বিক্ষিপ্ত শ্রেণীর ব্যতিক্রম পাওয়া যায় নি এসএসএল শংসাপত্র সম্পর্কিত বৈশিষ্ট্য রয়েছে। গ্রহনটি বন্ধ করুন এবং "প্রশাসক হিসাবে চালান" হিসাবে খোলার পরে সমস্যাটি সমাধান হয়ে গেছে। যেহেতু গ্রহনে সম্পর্কিত সম্পর্কিত অনুমতি রয়েছে এটি এ জাতীয় ধরণের ব্যতিক্রম ছুঁড়ে দেবে।


-7

সমস্ত কোড ট্রাই ব্লকে রাখুন এবং পরে ক্যাচ ব্লকে ব্যতিক্রম ধরুন

try
{
    // code
}
catch(ClassNotFoundException e1)
{
    e1.getmessage();
}

5
এটি ব্যতিক্রম সমাধান করে না। এটি ব্যতিক্রম লুকায়। তদ্ব্যতীত, "e1.getmessage ()" ক) getMessage () এবং খ) এর ভুল মূলধনটি কোনও বার্তা দিয়ে একটি স্ট্রিং ফেরত দেওয়ার কারণে খুব বেশি কিছু করবে না এবং আপনি এটি মুদ্রণ করছেন না বা এটি লগিং করছেন না বা কোনও কিছু!
আইবিবোর্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.