1

我正在尝试初始化斯坦福 NLP 语音标记器,但我不断收到 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();
    }

}

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

4

2 回答 2

1

这个问题读起来像是另一个 stackoverflow question的重复。这个问题的答案似乎很受欢迎,所以它可能会有所帮助。

顺便说一句:您应该验证用于编译您的应用程序的类是用于运行应用程序的类。

于 2010-01-11T06:42:38.583 回答
1

IncompatibleClassChangeError当某个类X已针对某个其他类的一个版本进行编译时,会发生这种情况Y,然后尝试使用该类的不同(不兼容)版本来加载它Y。如果您收到此错误而不是子类型,则可能意味着Y已从 an 更改interface为 aclass或反之亦然,或者其继承的接口和实现的类发生了更改。

您没有看到任何getMessage()输出的原因是它是notIncompatibleClassChangeError的子类型。因此for没有抓住它。只需将该行复制到下一个 catch 块即可解决此问题。lava.lang.Errorjava.lang.ExceptioncatchExceptionprintln(e.getMessage())

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

于 2010-01-11T06:44:06.707 回答