在java中使用Stanford postagger,获取java.lang.IncompatibleClassChangeError

时间:2010-01-11 06:06:47

标签: java stanford-nlp pos-tagger

我正在尝试初始化Stanford NLP Part of Speech标记器,并且我一直在获取java.lang.IncompatibleClassChangeError。当我打印出错误的原因时,我得到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();
    }

}

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

这个问题就像dup of another stackoverflow question。这个问题的答案似乎非常受欢迎,所以它可能会有所帮助。

暂且不说:您应该验证用于编译应用程序的类是用于运行应用程序的类。

答案 1 :(得分:1)

当针对某个其他类IncompatibleClassChangeError的某个版本编译某个类X时发生Y,然后尝试使用其他(不兼容)版本加载它班级Y。如果您收到此错误而不是子类型,则可能表示Y已从interface更改为class,反之亦然,或者其更改继承接口和实现的类。

您没有看到任何getMessage()输出的原因是IncompatibleClassChangeErrorlava.lang.Error而非java.lang.Exception的子类型。因此catch的{​​{1}}没有抓住它。只需将Exception行复制到下一个catch块就可以解决这个问题。

当您打印异常消息时,它应该告诉您更多有关导致问题的原因。但根本原因是您需要重新编译和/或确保在编译时和运行时使用相同的库JAR文件。