আমি কীভাবে কোনও নুশমথোডেরিয়র ঠিক করব?


178

NoSuchMethodErrorআমার জাভা প্রোগ্রামটি চালানোর সময় আমি একটি ত্রুটি পাচ্ছি। কী ভুল এবং আমি কীভাবে এটি ঠিক করব?


11
নেটবিনে: প্রকল্পগুলির ট্যাবে প্রকল্পে ডান ক্লিক করুন, "ক্লিন এবং বিল্ড" ব্যবহার করুন। আমার জন্য সমাধান।
হেইনজলমেন

3
এছাড়াও Intellij ধারণা, সমাধান সমস্যা মাঝে মাঝে পুনর্নির্মাণের
হক

1
এই নিবন্ধটি এই ইস্যুটি প্রতিবিম্বিত করার
মাইকেল স্মিথ

উত্তর:


228

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

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

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


3
আমরা সম্প্রতি এর মধ্যে একটির কারণ আবিষ্কার করেছি এবং এটি প্রমাণিত হয়েছে যে জাভা সার্ভারটি বন্ধ হওয়ার আগে বিল্ড প্রক্রিয়াটি ক্লাসের ফাইলগুলি স্থাপন করছিল এবং আমরা এটি আঘাত করেছি কারণ জাভা সার্ভার কিছু ক্লাস লোড করেনি, এবং তারপরে এটি লোড হয়েছিল কিছু কিন্তু এটি নতুন পেয়েছে, এবং যেহেতু নতুন কোডটি সেই পদ্ধতিগুলিকে উল্লেখ করেছে যেগুলি পুরানো শ্রেণীর ছিল না ... বিঙ্গো, নোছমথোডেরর
ভাইজর

"স্ট্যাকের ট্রেসটি দেখুন ..." - ঠিক আছে, আমি প্রায় সবসময় Caused byঅপরাধী শ্রেণি /
বয়সের সন্ধানের

108

আমার আপনার সমস্যা ছিল, এবং আমি এটি ঠিক করেছি। নিম্নলিখিত পদক্ষেপগুলি একটি লাইব্রেরি যুক্ত করার একটি কার্যকরী উপায়। আমি প্রথম দুটি পদক্ষেপটি ঠিকঠাক করেছি, তবে আমি আমার ग्रहण প্রকল্পের ".jar" ফাইলটি সরাসরি ফাইল সিস্টেম থেকে সরাসরি "লিবিব" ফোল্ডারে টেনে নিয়ে গিয়েছিলাম না। অতিরিক্তভাবে, আমাকে বিল্ড পাথ এবং "লিবিব" ফোল্ডার উভয় থেকে গ্রন্থাগারের পূর্ববর্তী সংস্করণটি সরিয়ে ফেলতে হয়েছিল।

পদক্ষেপ 1 - পাথ তৈরি করতে .জার যুক্ত করুন

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 2 - সহযোগী উত্স এবং জাভাদোকস (alচ্ছিক)

এখানে চিত্র বর্ণনা লিখুন

পদক্ষেপ 3 - আসলে .jar ফাইলটিকে "lib" ফোল্ডারে টেনে আনুন (optionচ্ছিক নয়)

এখানে চিত্র বর্ণনা লিখুন


75
"1 এর জন্য প্রত্যেকের প্রত্যাশা রয়েছে যে আপনি এটি কীভাবে ব্যবহার করবেন এবং আপনি যদি তা না করেন তবে তারা আপনার প্রশ্নকে নীচে নামবে" "
বিক্রম

73

মনে রাখবেন যে প্রতিবিম্বের ক্ষেত্রে আপনি NoSuchMethodExceptionঅ-প্রতিবিম্বিত কোড সহ একটি পাবেন NoSuchMethodError। একজনের বিপরীতে যখন আমার মুখোমুখি হয় তখন আমি খুব আলাদা জায়গায় সন্ধান করি।


অন্য কথায়, আপনি বলছেন যে আপনি যদি ক্লাসে কোনও পদ্ধতি পাওয়ার জন্য প্রতিবিম্ব ব্যবহার করছেন এবং পদ্ধতিটি খুঁজে পাওয়া যায় না, আপনি একটি নুশমথোডএক্সেপশন পাবেন। আপনি যদি কিছু লিবসের বিরুদ্ধে এবং সার্ভারে আপনার অন্যান্য লিবসের বিপরীতে আপনার কোডটি সংকলন করেন এমন পরিস্থিতিতে আপনি যদি হন (সম্ভবত আরও পুরানো আরও পুরানো) তবে আপনি নুশমথোডেরর পাবেন। আমি ভুল হলে শুধরে.
ভিক্টর

এটি সঠিক, @ ভিক্টর
কৃষ্ণপ্রকাশ

51

আপনার যদি জেভিএম প্যারামিটারগুলি পরিবর্তন করার অ্যাক্সেস থাকে তবে ভার্বোজ আউটপুট যুক্ত করার ফলে কোন জেআর ফাইলগুলি থেকে কোন ক্লাসগুলি লোড হচ্ছে তা আপনাকে দেখার অনুমতি দেওয়া উচিত।

java -verbose:class <other args>

আপনার প্রোগ্রামটি চলাকালীন, জেভিএমকে স্ট্যান্ডার্ড আউট তথ্য যেমন:

...

[জুনিট.ফ্রেমে ওয়ার্ক লোড করা হয়েছে file ফাইল থেকে সন্নিবেশ: / সি: / প্রোগ্রাম ১০০ ফাইলেস / জুনিট 3.৮.২ / জুনিট.জার]

...


3
+1 উজ্জ্বল! ধন্যবাদ, এই পদ্ধতিটি ব্যবহার করে আমি একটি বাজে সমস্যা সমাধান করেছি। ক্লাসগুলি কোনওরকম কোনও ক্লাসপাথে চলে যাওয়ার সময় আবিষ্কার করার এটি একটি দুর্দান্ত উপায়।
ডানকান জোন্স

1
+1 আপনি আমার দিন বাঁচিয়েছেন! এটি কেবলমাত্র একটি গ্রন্থাগার ছিল যার উত্সগুলিতে একই নামের পুরানো ক্লাসগুলি অন্তর্ভুক্ত ছিল।
আন্দ্রে নেমচেঙ্কো

12

এটি সাধারণত অ্যাপাচি পিঁপড়ার মতো বিল্ড সিস্টেম ব্যবহার করার সময় ঘটে থাকে যখন জাভা ফাইলগুলি ক্লাস ফাইলের চেয়ে নতুন হয় কেবল তখনই জাভা ফাইলগুলি সংকলন করে। যদি কোনও পদ্ধতিতে স্বাক্ষর পরিবর্তন হয় এবং ক্লাসগুলি পুরানো সংস্করণ জিনিসগুলি ব্যবহার করা হত তবে সঠিকভাবে সংকলন করা যাবে না। স্বাভাবিক ফিক্সটি হল একটি সম্পূর্ণ পুনর্নির্মাণ (সাধারণত "পিঁপড়া পরিষ্কার" তারপরে "পিঁপড়ে")।

কখনও কখনও এটি একটি লাইব্রেরির একটি সংস্করণের বিপরীতে সংকলন করার সময় কিন্তু ভিন্ন সংস্করণের বিপরীতে চলার সময়ও হতে পারে।


1
প্রকৃতপক্ষে, এটি আরও এমন সমস্যার মতো অনুভূত হয় যা জাভা প্রোগ্রামারদের জন্য ফসল তৈরি করে যারা কোনও জাভা বিকাশ কাঠামো ব্যবহার করছেন: মাভেন, নেটবিয়ানস এবং অ্যাপাচি পিঁপড়া, আপনি এখানে সমস্ত উত্তর থেকে দেখতে পারেন।
হোল্ডঅফহাঙ্গার

8

যদি মাভেন বা অন্য কোনও কাঠামো ব্যবহার করে থাকেন এবং আপনি প্রায় এলোমেলোভাবে এই ত্রুটিটি পান তবে একটি পরিষ্কার ইনস্টল চেষ্টা করুন ...

clean install

আপনি যদি বস্তুটি লিখে থাকেন এবং আপনি জানেন যে এটির পদ্ধতি রয়েছে তবে এটি কাজ করে especially আমার জন্য কাজ করেছেন।


গ্র্যাডল বিল্ডসের ক্ষেত্রে এটিও।
জোনাথন ল্যান্ড্রাম

4

এটি প্রতিবিম্ব ব্যবহারের ফলাফলও হতে পারে। যদি আপনার এমন কোড থাকে যা কোনও শ্রেণিতে Class.getDeclaredMethod("someMethodName", .....)প্রতিবিম্বিত হয় এবং নাম অনুসারে একটি পদ্ধতি বের করে (উদাহরণস্বরূপ: সাথে ) তবে যে কোনও সময় সেই পদ্ধতির নাম পরিবর্তিত হয়, যেমন একটি রিফ্যাক্টরের সময়, আপনাকে ম্যাচটি মেলে প্রতিফলনের পদ্ধতিতে পরামিতিগুলি আপডেট করতে হবে নতুন পদ্ধতি স্বাক্ষর, বা getDeclaredMethodকল একটি নিক্ষেপ করবে NoSuchMethodException

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

আমার অভিজ্ঞতায়, ইউনিট যখন ব্যক্তিগত পদ্ধতি / ক্ষেত্রগুলি TestUtilitiesপরীক্ষা করে এবং পরীক্ষার যাচাইয়ের জন্য ক্ষেত্রগুলি বের করতে একটি ক্লাস ব্যবহার করে তখন মাঝে মাঝে এটি উপস্থিত হয় । (সাধারণত উত্তরাধিকারের কোডটি যা ইউনিট পরীক্ষার বিষয়টি মাথায় রেখে তৈরি করা হয়নি))


3

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

যেমন

  • হুল বিড়াল / সাধারণ / lib
  • mywebapp / web-INF / lib

2

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

উদা:

filenotnull=/DayMoreConfig.conf
16-07-2015 05:02:10:ussdgw-1: Open TCP/IP connection to SMSC: 10.149.96.66 at 2775
16-07-2015 05:02:10:ussdgw-1: Bind request: (bindreq: (pdu: 0 9 0 [1]) 900 900 GEN 52 (addrrang: 0 0 2000) ) 
Exception in thread "main" java.lang.NoSuchMethodError: gateway.smpp.PDUEventListener.<init>(Lgateway/smpp/USSDClient;)V
        at gateway.smpp.USSDClient.bind(USSDClient.java:139)
        at gateway.USSDGW.initSmppConnection(USSDGW.java:274)
        at gateway.USSDGW.<init>(USSDGW.java:184)
        at com.vinaphone.app.ttn.USSDDayMore.main(USSDDayMore.java:40)

-bash-3.00$ 

এই সমস্যাগুলি সমগতি সম্পন্ন 02 টি একই বর্গ দ্বারা সৃষ্ট হয় (এসআরসি-তে 1, জার ফাইলে 1 এখানে গেটওয়ে.জার রয়েছে)


2

এর অর্থ এটি সম্পর্কিত পদ্ধতিটি শ্রেণিতে উপস্থিত নেই:

  1. আপনি যদি জার ব্যবহার করছেন তবে ডাম্পোপাইল করুন এবং জারের সম্পর্কিত সংস্করণটির যথাযথ বর্গ রয়েছে কিনা তা পরীক্ষা করুন।
  2. আপনি যদি আপনার উত্স থেকে যথাযথ ক্লাস সংকলন করেছেন কিনা তা পরীক্ষা করে দেখুন।

2

আমার জন্য এটি ঘটেছিল কারণ আমি ফাংশনে যুক্তির প্রকারটি পরিবর্তন করেছি, অবজেক্ট এ থেকে স্ট্রিং এ তে। আমি এটি পরিষ্কার দিয়ে আবার সমাধান করতে পারতাম


2

আমি আমার Eclipse পুনরায় চালু করে অ্যাপ্লিকেশনটি চালিয়ে এই ত্রুটিটি সমাধান করেছি। আমার মামলার কারণ হতে পারে কারণ আমি আমার প্রকল্প বা গ্রহনটি বন্ধ না করে আমার উত্স ফাইলগুলি প্রতিস্থাপন করব। যার ফলে আমি ক্লাসের বিভিন্ন সংস্করণ ব্যবহার করছিলাম।


2

এই উপায়টি ব্যবহার করে দেখুন: আপনার প্রকল্প ডিরেক্টরিগুলির অধীনে সমস্ত .class ফাইলগুলি সরিয়ে দিন (এবং অবশ্যই, সমস্ত উপ ডিরেক্টরি)। পুনর্নির্মাণ।

কখনও কখনও mvn clean(যদি আপনি maven ব্যবহার করছেন) ম্যানুয়ালি তৈরি ক্লাস ফাইলগুলি পরিষ্কার করে না javac। এবং সেই পুরানো ফাইলগুলিতে পুরানো স্বাক্ষর রয়েছে, যা বাড়ে NoSuchMethodError


2

কেবলমাত্র বিদ্যমান উত্তরের সাথে যুক্ত করা হচ্ছে। আমি গ্রহনে টমক্যাট নিয়ে এই সমস্যার মুখোমুখি ছিলাম। আমি একটি ক্লাস পরিবর্তন করেছি এবং নিম্নলিখিত পদক্ষেপগুলি করেছি,

  1. ক্লিপ প্রকল্পটি ক্লিপ করে নির্মাণ করেছেন

  2. এমভিএন ক্লিন ইনস্টল

  3. টমক্যাটটি পুনরায় চালু করা হয়েছে

তবুও আমি একই ত্রুটির মুখোমুখি হয়েছি। তারপরে আমি টমকাট পরিষ্কার করেছি, টমক্যাট ওয়ার্কিং ডিরেক্টরি পরিষ্কার করেছি এবং সার্ভার পুনরায় চালু করেছি এবং আমার সমস্যাটি শেষ হয়ে গেছে। আশা করি এটি কাউকে সাহায্য করবে


1

মূল প্রশ্নের উত্তর দিতে। জাভা ডক্স অনুসারে এখানে :

"NoSuchMethodError" যদি কোনও অ্যাপ্লিকেশন কোনও শ্রেণীর নির্দিষ্ট পদ্ধতি (স্থির বা উদাহরণস্বরূপ) কল করার চেষ্টা করে, এবং সেই শ্রেণীর আর সেই পদ্ধতির কোনও সংজ্ঞা না থাকে তবে ছুঁড়ে দেওয়া হয়।

সাধারণত, এই ত্রুটিটি সংকলক দ্বারা ধরা পড়ে; এই ত্রুটিটি কেবল রান সময়ে ঘটতে পারে যদি কোনও শ্রেণির সংজ্ঞা অসম্পূর্ণভাবে পরিবর্তিত হয়।

  1. যদি এটি রান সময় হয়, পদ্ধতিটি ক্লাসের পথে রয়েছে এমন ক্লাসটি পরীক্ষা করুন।
  2. আপনি জেআর এর নতুন সংস্করণ যুক্ত করেছেন এবং পদ্ধতিটি সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করে দেখুন।

1

আমি জুনিট টেস্ট ফাইলটির নাম পরিবর্তন করে এই সমস্যাটি Eclipse এ ঠিক করেছি।
আমার Eclipse কাজের জায়গাতে আমার কাছে একটি অ্যাপ প্রকল্প এবং একটি পরীক্ষার প্রকল্প রয়েছে।
নির্মাণ প্রকল্পে প্রয়োজনীয় প্রকল্প হিসাবে টেস্ট প্রকল্পটিতে অ্যাপ প্রকল্প রয়েছে has

NoSuchMethodError পেতে শুরু করেছেন।
তখন আমি বুঝতে পারলাম টেস্ট প্রকল্পের ক্লাসটির অ্যাপ্লিকেশন প্রকল্পের ক্লাসটির একই নাম ছিল।

App/  
  src/
     com.example/  
       Projection.java
Test/  
  src/
     com.example/
       Projection.java

পরীক্ষার নামটির পরে সঠিক নাম "প্রজেকশন টেস্ট.জভা" রেখে ব্যতিক্রমটি চলে যায়।


আমারও একি দশা. একই সম্পূর্ণ ক্যানোনিকাল নাম সহ আমার একটি নির্ভরতা শ্রেণি ছিল। নাম বদলে ব্যতিক্রম চলে গেল।
মোড়লেজাসাইন কেন্টোনিপ্রোভারিও

1

আমার একই ত্রুটি ছিল:

  Exception in thread "main" java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonGenerator.writeStartObject(Ljava/lang/Object;)V
        at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:151)
        at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292)
        at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3681)
        at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3057)

এটি সমাধান করার জন্য আমি প্রথমে যাচাই করেছিলাম, গ্রন্থাগারের (ইন্টেলিজ আইডিইএ) মধ্যে দ্বন্দ্বটি ঠিক কোথায় ছিল তা বুঝতে মডিউল নির্ভরতা ডায়াগ্রাম ( click in your POM the combination -> Ctrl+Alt+Shift+Uবা right click in your POM -> Maven -> Show dependencies)। আমার বিশেষ ক্ষেত্রে আমার জ্যাকসন নির্ভরতার বিভিন্ন সংস্করণ ছিল।

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

1) সুতরাং, আমি প্রকল্পের আমার POM এ সরাসরি যুক্ত করেছিলাম সর্বোচ্চ সংস্করণ - এই দুটির মধ্যে 2.8.7।

বৈশিষ্ট্যে:

<jackson.version>2.8.7</jackson.version>

এবং নির্ভরতা হিসাবে:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>${jackson.version}</version>
</dependency>

2) তবে এটি নির্ভরতা বহির্ভূততা ব্যবহার করেও সমাধান করা যেতে পারে ।

উদাহরণ হিসাবে নীচের মত একই নীতি দ্বারা:

  <dependency>
      <groupId>group-a</groupId>
      <artifactId>artifact-a</artifactId>
      <version>1.0</version>
          <exclusions>
             <exclusion>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
             </exclusion>
         </exclusions>
  </dependency>

অযাচিত সংস্করণ সহ নির্ভরতা আপনার প্রকল্প থেকে বাদ দেওয়া হবে।


1

আমার ক্ষেত্রে আমার একাধিক মডিউল প্রকল্প com.xyz.TestClassছিল এবং দৃশ্যটি মডিউলে Aযেমন ছিল তেমনই মডিউল Bএবং মডিউলটিতে মডিউল Aনির্ভর ছিল B। সুতরাং অ্যাসেম্বলি জারটি তৈরি করার সময় আমি মনে করি ক্লাসের কেবল একটি সংস্করণ বজায় রাখা হয়েছিল যদি সেই অনুরোধ পদ্ধতিটি না থাকে তবে আমি NoSuchMethodErrorরানটাইম ব্যতিক্রম পাচ্ছিলাম , তবে সংকলনটি ছিল ঠিক fine

সম্পর্কিত: https://reflectoring.io/nosuchmethod/


0

আমি যখন আমার অ্যাপ্লিকেশনটিতে পদ্ধতি স্বাক্ষরগুলি পরিবর্তন করছিলাম তখন আমি একই ধরণের সমস্যায় পড়েছিলাম। আমার প্রকল্পটি পরিষ্কার এবং পুনর্নির্মাণ "NoSuchMethodError" সমাধান করেছে।


0

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


0

আমি একই ইস্যু মধ্যে দৌড়ে।

Caused by: java.lang.NoSuchMethodError: com.abc.Employee.getEmpId()I

অবশেষে আমি সনাক্ত করলাম মূল কারণটি ভেরিয়েবলের ডেটা ধরণের পরিবর্তন করছিল।

  1. Employee.java-> ভেরিয়েবল ( EmpId) থাকে যার ডেটা টাইপ থেকে পরিবর্তিত intহয়েছে String
  2. ReportGeneration.java-> গেটর ব্যবহার করে মানটি পুনরুদ্ধার করে getEmpId()

আমাদের কেবলমাত্র পরিবর্তিত ক্লাসগুলি অন্তর্ভুক্ত করে জারটিকে পুনরায় ফিরিয়ে আনার কথা রয়েছে। আমার কোনও পরিবর্তন হয়নি ReportGeneration.javaবলে কেবল Employee.classজার ফাইলটিতে অন্তর্ভুক্ত ছিল। ReportGeneration.classসমস্যাটি সমাধান করার জন্য আমাকে ফাইলটি জারে অন্তর্ভুক্ত করতে হয়েছিল।


0

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

ডিআইএসপি_সেক্সেসিপশন [পদক্ষেপ] [] [জেড-জাভা -১৫৫ জাভা ব্যতিক্রম জাভা.এলং.নোসুচমথোডেরর (com.example.yourmethod)]


0

বেশিরভাগ সময় java.lang.NoSuchMethodError ধরা পড়ে সংকলক হতে পারে তবে কখনও কখনও রানটাইম হতে পারে। যদি এই ত্রুটিটি রানটাইমের সময়ে ঘটে থাকে তবে একমাত্র কারণ ক্লাস কাঠামোর পরিবর্তনের কারণেই এটি বেমানান।

সেরা ব্যাখ্যা: https://www.jorterdev.com/14538/java-lang-nosuchmethoderror


0

আমিও এই ত্রুটির মুখোমুখি হয়েছি।

আমার সমস্যাটি হ'ল আমি কোনও পদ্ধতির স্বাক্ষর পরিবর্তন করেছি, এরকম কিছু

void invest(Currency money){...}

মধ্যে

void invest(Euro money){...}

এই পদ্ধতিটির অনুরূপ প্রসঙ্গ থেকে আহ্বান করা হয়েছিল

public static void main(String args[]) {
    Bank myBank = new Bank();

    Euro capital = new Euro();
    myBank.invest(capital);
}

সংকলক সতর্কবাণী / ত্রুটির বিষয়ে নীরব ছিল, কারণ মূলধন উভয়ই মুদ্রার পাশাপাশি ইউরোও।

সমস্যাটি এই কারণে এসেছিল যে আমি কেবল ক্লাসটিই সংকলন করেছি যেখানে পদ্ধতিটি সংজ্ঞায়িত হয়েছিল - ব্যাংক, তবে যে শ্রেণি থেকে পদ্ধতিটি আহ্বান করা হচ্ছে তা নয়, যার মূল () পদ্ধতি রয়েছে।

এই সমস্যাটি এমন কোনও বিষয় নয় যা আপনি প্রায়শই মুখোমুখি হতে পারেন, কারণ প্রায়শই প্রকল্পটি ম্যানুয়ালি পুনর্নির্মাণ করা হয় বা একটি পরিবর্তিত শ্রেণীর সংকলন না করে একটি বিল্ড অ্যাকশন স্বয়ংক্রিয়ভাবে ট্রিগার হয়।

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

কথাটি হ'ল, আপনি যখন একটি ক্লাস সংকলন করেন, ফলস্বরূপ বাইটকোড এক ধরণের স্থির , অন্য কথায়, এটি একটি হার্ড-রেফারেন্স

মূল বিচ্ছিন্ন করা বাইটকোড (জাভাপ সরঞ্জাম দিয়ে উত্পন্ন) এর মতো দেখাচ্ছে:

 #7 = Methodref          #2.#22         // Bank.invest:(LCurrency;)V

ClassLoader নতুন সংকলিত Bank.class লোড করার পরে, এটি এমন কোনও পদ্ধতি খুঁজে পাবে না, এটি প্রদর্শিত হয় যেন এটি সরিয়ে নেওয়া হয়েছে এবং পরিবর্তিত হয়নি, এইভাবে নামযুক্ত ত্রুটি।

আশাকরি এটা সাহায্য করবে.


0

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


0

আমার গ্রেডেল প্রকল্পটি ইন্টেলিজ ব্যবহার করে একই ধরণের সমস্যা হয়েছিল had .Gradle (নীচের স্ক্রিনশট দেখুন) প্যাকেজটি মুছে ফেলে এবং প্রকল্পটি পুনর্নির্মাণ করে আমি এটি সমাধান করেছি। .গ্রাডেল প্যাকেজ


0

NoSuchMethodError: আমি এই সমস্যাটি সমাধান করতে কয়েক ঘন্টা ব্যয় করেছি, অবশেষে কেবলমাত্র প্যাকেজের নাম পরিবর্তন করে পরিষ্কার এবং বিল্ড করে এটি ঠিক করেছি ... ক্লাসের নাম বা প্যাকেজের নাম এবং ক্লিন বিল্ডের নামকরণের চেষ্টা না করলে প্রথমে ক্লিন বিল্ড চেষ্টা করুন .. .এটি ঠিক করা উচিত। শুভকামনা।


-2

আপনার ফাইলের নামটি যদি মেথ মেথডযুক্ত শ্রেণীর নামের চেয়ে আলাদা হয় তবে এই ত্রুটি হওয়ার কারণ হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.