Используя постаггер Stanford в java, получая java.lang.IncompatibleClassChangeError - PullRequest
1 голос
/ 11 января 2010

Я пытаюсь инициализировать 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 ]

1 голос
/ 11 января 2010

IncompatibleClassChangeError происходит, когда некоторый класс X был скомпилирован с одной версией другого класса Y, и затем делается попытка загрузить его с другой (несовместимой) версией класса Y , Если вы получаете эту ошибку, а не подтип, это, вероятно, означает, что Y изменился с interface на class или наоборот, или что произошли изменения в его унаследованных интерфейсах и реализованных классах.

Причина, по которой вы не видите вывод getMessage(), заключается в том, что IncompatibleClassChangeError является подтипом lava.lang.Error, а не java.lang.Exception. Поэтому catch для Exception не ловит его. Простое копирование строки println(e.getMessage()) в следующий блок catch должно исправить это.

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

1 голос
/ 11 января 2010

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

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

...