باستخدام Stanford Postager في Java، الحصول على java.lang.incompatileclasschangeError
-
19-09-2019 - |
سؤال
أحاول تهيئة الجزء Stanford NLP من الكلام Tagger وأظل الحصول على java.lang.incompatileclasschangeError. عندما أطبع سبب الخطأ، أحصل على NULL، عندما أطبع الرسالة أحصل على فئة.
هذا هو رمزي:
try {
MaxentTagger tagger = new MaxentTagger(path+"left3words-wsj-0-18.tagger");
Reader reader = new BufferedReader(new InputStreamReader(System.in));
List<Sentence<? extends HasWord>> sentences = MaxentTagger.tokenizeText(reader);
for (Sentence<? extends HasWord> sentence : sentences) {
Sentence<TaggedWord> tSentence = MaxentTagger.tagSentence(sentence);
System.out.println(tSentence.toString(false));
}
} catch (IOException e) {
System.err.println("READ ERROR");
e.printStackTrace();
} catch (Exception e) {
System.err.println("TAGGER ERROR");
e.getMessage();
} catch(java.lang.IncompatibleClassChangeError e){
e.getStackTrace();
}
}
هل يعرف اي احد كيفية اصلاح هذا؟
المحلول
أ IncompatibleClassChangeError
يحدث عندما بعض الفئة X
تم تجميعها ضد نسخة واحدة من بعض الطبقة الأخرى Y
, ، ثم يتم إجراء محاولة لتحميلها بنسخة مختلفة (غير متوافقة) من الفصل Y
. وبعد إذا كنت تحصل على هذا الخطأ بدلا من نوع فرعي، فربما يعني ذلك Y
قد تغير من interface
إلى أ class
أو العكس، أو أنه كان هناك تغيير في واجهاته الموروثة والفئات المنفذة.
السبب في أنك لا ترى أي getMessage()
الإخراج هو IncompatibleClassChangeError
هو نوع فرعي من lava.lang.Error
ليس java.lang.Exception
. وبعد لذلك catch
بالنسبة Exception
لا يلفت بها. ببساطة نسخ println(e.getMessage())
يجب على الخط إلى كتلة الصيد التالية إصلاح هذا.
عند طباعة رسالة الاستثناء، يجب أن أقول لك المزيد حول ما يسبب المشكلة. لكن السبب الجذري هو أنك تحتاج إلى إعادة ترجمة و / أو تأكد من أنك تستخدم ملفات جرة المكتبة نفسها في وقت الترجمة ووقت التشغيل.
نصائح أخرى
يقرأ هذا السؤال مثل DUP من سؤال آخر stackoverflow. وبعد يبدو أن الإجابة على هذا السؤال شائعة جدا، لذلك من المحتمل أن تكون مفيدة.
جانبا: يجب عليك التحقق من أن الفئات المستخدمة لتجميع تطبيقك هي الفئات المستخدمة في تشغيل التطبيق.