باستخدام Stanford Postager في Java، الحصول على java.lang.incompatileclasschangeError

StackOverflow https://stackoverflow.com/questions/2040206

  •  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. وبعد يبدو أن الإجابة على هذا السؤال شائعة جدا، لذلك من المحتمل أن تكون مفيدة.

جانبا: يجب عليك التحقق من أن الفئات المستخدمة لتجميع تطبيقك هي الفئات المستخدمة في تشغيل التطبيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top