Использование Стэнфордского постагера в Java, получение java.lang.InсовместимогоКлассаChangeError

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь инициализировать тэгер части речи Стэнфордского НЛП и продолжаю получать ошибку java.lang.InсовместимыйClassChangeError.Когда я печатаю причину ошибки, я получаю ноль, когда я печатаю сообщение, я получаю Implementing Class.

Это мой код:

    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()) строка до следующего блока catch должна это исправить.

Когда вы печатаете сообщение об исключении, оно должно содержать дополнительную информацию о причине проблемы.Но основная причина заключается в том, что вам необходимо перекомпилировать и/или убедиться, что вы используете одни и те же файлы JAR библиотеки во время компиляции и во время выполнения.

Другие советы

Этот вопрос читается как дубликат другого вопроса о stackoverflow.Ответ на этот вопрос, кажется, был довольно популярен, поэтому он, вероятно, будет полезен.

Как в сторону:вам следует убедиться, что классы, используемые для компиляции вашего приложения, являются классами, которые используются для запуска приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top