Java에서 Stanford Postagger를 사용하여 java.lang.incompatibleclasschangeerror를 얻습니다
-
19-09-2019 - |
문제
Speech Tagger의 Stanford NLP 부분을 초기화하려고 노력하고 있으며 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();
}
}
누구 든지이 문제를 해결하는 방법을 아는 사람이 있습니까?
해결책
an IncompatibleClassChangeError
수업이 발생할 때 발생합니다 X
다른 클래스의 한 버전에 대해 컴파일되었습니다. Y
, 그런 다음 다른 (호환되지 않는) 클래스로로드하려는 시도가 이루어집니다. Y
. 하위 유형이 아닌이 오류를 받고 있다면 아마도 Y
AN에서 변경되었습니다 interface
a class
또는 그 반대로, 또는 상속 된 인터페이스 및 구현 된 클래스가 변경되었습니다.
당신이 보지 못하는 이유 getMessage()
출력입니다 IncompatibleClassChangeError
하위 유형입니다 lava.lang.Error
~ 아니다 java.lang.Exception
. 따라서 catch
~을 위한 Exception
그것을 잡지 않습니다. 간단히 복사합니다 println(e.getMessage())
다음 캐치 블록에 라인은 이것을 고정해야합니다.
예외 메시지를 인쇄 할 때 문제의 원인에 대해 더 많이 알려야합니다. 그러나 근본 원인은 컴파일 시간과 런타임에 동일한 라이브러리 JAR 파일을 사용하고 있는지 확인하고/하거나 동일한 라이브러리 JAR 파일을 사용하고 있는지 확인해야합니다.
다른 팁
이 질문은 a처럼 읽습니다 다른 stackoverflow 질문의 dup. 그 질문에 대한 대답은 꽤 인기있는 것으로 보이므로 도움이 될 것입니다.
따로 : 앱을 컴파일하는 데 사용되는 클래스가 앱을 실행하는 데 사용되는 클래스인지 확인해야합니다.