在java中使用Stanford postagger,得到java.lang.InknownClassChangeError
-
19-09-2019 - |
题
我正在尝试初始化斯坦福 NLP 语音标注器,但我不断收到 java.lang.IncompleteClassChangeError 错误。当我打印错误原因时,我得到 null,当我打印消息时,我得到 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 问题的重复. 。这个问题的答案似乎很受欢迎,所以它可能会有所帮助。
作为旁白:您应该验证用于编译应用程序的类是否是用于运行应用程序的类。
不隶属于 StackOverflow