Mit Hilfe der Stanford postagger in java, bekommen java.lang.IncompatibleClassChangeError
-
19-09-2019 - |
Frage
Ich versuche, die Stanford NLP Part of Speech Tagger zu initialisieren und ich immer einen java.lang.IncompatibleClassChangeError bekommen. Als ich die Ursache des Fehlers drucken, ich null bekommen, wenn ich die Nachricht aus erhalte ich Implementierende Klasse.
Dies ist mein Code:
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();
}
}
Wer weiß, wie dieses Problem beheben?
Lösung
Ein IncompatibleClassChangeError
passiert, wenn einige Klassen X
hat mich gegen eine Version von einer anderen Klasse Y
zusammengestellt worden, und dann wird versucht, es mit einer anderen (nicht kompatibel) Version der Klasse Y
zu laden. Wenn Sie diese Fehler werden immer eher als ein Subtyp, ist es wahrscheinlich bedeutet, dass Y
von einem interface
zu einem class
oder umgekehrt geändert hat, oder dass es eine Änderung in seinen geerbten Schnittstellen und umgesetzt Klassen wurde.
Der Grund, dass Sie keine getMessage()
Ausgabe sehen, ist, dass IncompatibleClassChangeError
ein Subtyp von lava.lang.Error
ist nicht java.lang.Exception
. Deshalb ist die catch
für Exception
holt es nicht. Einfaches Kopieren der println(e.getMessage())
Linie diese auf den nächsten catch-Block sollte beheben.
Wenn Sie die Ausnahmemeldung drucken, sollte es Ihnen mehr über das, was das Problem verursacht. Aber die Ursache ist, dass Sie neu kompilieren müssen und / oder stellen Sie sicher, dass Sie die gleiche Bibliothek JAR-Dateien während der Kompilierung und Laufzeit verwenden.
Andere Tipps
Diese Frage liest sich wie ein dup einer anderen Frage Stackoverflow. Die Antwort auf diese Frage scheint ziemlich beliebt gewesen zu sein, so ist es wahrscheinlich hilfreich sein soll.
Als Nebenwirkung. Sie sollten sicherstellen, dass die Klassen, die verwendet werden, Ihre Anwendung zu kompilieren, sind die Klassen, die verwendet werden, um die Anwendung ausführen