にスタンフォードpostagger java、java.lang.IncompatibleClassChangeError
-
19-09-2019 - |
質問
私を初期化するスタンフォードNLPの音声taggerいくには、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();
}
}
なんだろうけど、日本人にどうすればいい?
解決
IncompatibleClassChangeError
は、いくつかの他のクラスX
のバージョンに対してコンパイルされ、その後の試みは、クラスY
の異なる(互換性のない)バージョンとそれをロードするために構成されているときに Y
が起こります。あなたではなく、サブタイプよりも、このエラーを取得している場合、それはおそらくY
がinterface
またはその逆にclass
から変更されたこと、またはその継承されたインタフェースと実装クラスに変更があったことを意味します。
あなたがどんなgetMessage()
出力が表示されない理由はIncompatibleClassChangeError
がlava.lang.Error
ないjava.lang.Exception
のサブタイプであることです。したがってcatch
ためException
はそれをキャッチされていません。単純にこの問題を解決する必要があり、次のcatchブロックにprintln(e.getMessage())
ラインをコピーします。
あなたは例外メッセージを印刷するとき、それはあなたの問題を引き起こしているものについての詳細を教えてください。しかし、根本的な原因は、あなたが再コンパイルおよび/またはあなたがコンパイル時と実行時に同じライブラリのJARファイルを使用していることを確認する必要があるということです。
他のヒント
この質問を読み込みのように dupの他stackoverflowの質問.その答えのしようがない人気のでる様にご提供いただきました。
ちなみに:きることを確認の授業に使用されるコンパイルアプリのクラス用のアプリです。