Mit Hilfe der Stanford postagger in java, bekommen java.lang.IncompatibleClassChangeError

StackOverflow https://stackoverflow.com/questions/2040206

  •  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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top