Используя постаггер Stanford в java, получая java.lang.IncompatibleClassChangeError
Я пытаюсь инициализировать Stanford NLP Part of Speech tagger и продолжаю получать java.lang.IncompatibleClassChangeError. Когда я печатаю причину ошибки, я получаю ноль, когда я печатаю сообщение, я получаю Реализующий класс.
Это мой код:
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();
}
}
Кто-нибудь знает, как это исправить?
2 ответа
IncompatibleClassChangeError
происходит, когда какой-то класс X
был скомпилирован с одной версией некоторого другого класса Y
, а затем делается попытка загрузить его с другой (несовместимой) версией класса Y
, Если вы получаете эту ошибку, а не подтип, это, вероятно, означает, что Y
изменился с interface
к class
или наоборот, или что произошли изменения в его унаследованных интерфейсах и реализованных классах.
Причина, по которой вы не видите getMessage()
выход в том, что IncompatibleClassChangeError
это подтип lava.lang.Error
не java.lang.Exception
, Следовательно catch
за Exception
не ловит это. Просто копирую println(e.getMessage())
строка к следующему блоку catch должна исправить это.
Когда вы печатаете сообщение об исключении, оно должно рассказать вам больше о том, что является причиной проблемы. Но основная причина в том, что вам нужно перекомпилировать и / или убедиться, что вы используете одни и те же библиотечные JAR-файлы во время компиляции и во время выполнения.
Этот вопрос читается как дубликат другого вопроса stackru. Ответ на этот вопрос, кажется, был довольно популярен, поэтому он, вероятно, будет полезен.
Кроме того: вы должны убедиться, что классы, которые используются для компиляции вашего приложения, являются классами, которые используются для запуска приложения.