Utilisation de la PosTagger Stanford en java, obtenir java.lang.IncompatibleClassChangeError
-
19-09-2019 - |
Question
Je suis en train d'initialiser le PNL Stanford Partie du discours tagger et je continue à obtenir un java.lang.IncompatibleClassChangeError. Lorsque j'imprime la cause de l'erreur, je reçois nulle, quand j'imprimer le message que je reçois d'exécution de classe.
Ceci est mon 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();
}
}
Quelqu'un sait comment résoudre ce problème?
La solution
Un IncompatibleClassChangeError
se produit lorsque certains X
de classe a été compilé avec une version de une autre classe Y
, puis une tentative de le charger avec une version différente (incompatible) de la Y
de classe. Si vous obtenez cette erreur plutôt que d'un sous-type, cela signifie probablement que Y
a changé d'un interface
à un class
ou vice-versa, ou qu'il ya eu un changement dans ses interfaces héritées et les classes mises en œuvre.
La raison pour laquelle vous ne voyez pas une sortie getMessage()
est que IncompatibleClassChangeError
est un sous-type de lava.lang.Error
pas java.lang.Exception
. Par conséquent, le catch
pour Exception
ne l'attrapant. copier simplement la ligne de println(e.getMessage())
au prochain bloc catch devrait résoudre ce problème.
Lorsque vous imprimez le message d'exception, il devrait vous en dire plus sur ce qui est la cause du problème. Mais la cause fondamentale est que vous devez recompiler et / ou assurez-vous que vous utilisez les mêmes fichiers de bibliothèque JAR au moment de la compilation et l'exécution.
Autres conseils
Cette question se lit comme un dup d'un autre question stackoverflow. La réponse à cette question semble avoir été très populaire, il est donc susceptible d'être utile.
En aparté. Vous devez vérifier que les classes qui sont utilisées pour compiler votre application sont les classes qui sont utilisées pour exécuter l'application