Usando o postagger Stanford em java, ficando java.lang.IncompatibleClassChangeError
-
19-09-2019 - |
Pergunta
Eu estou tentando inicializar o Stanford PNL Parte do tagger Speech e eu continuo recebendo um java.lang.IncompatibleClassChangeError. Quando eu imprimir a causa do erro, eu recebo null, quando eu imprimir a mensagem que recebo Implementação Class.
Este é meu código:
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();
}
}
Alguém sabe como consertar isso?
Solução
Um IncompatibleClassChangeError
acontece quando alguma classe X
foi compilado com uma versão de algum outro Y
classe, e em seguida, é feita uma tentativa para carregá-lo com uma versão diferente (incompatível) do Y
classe. Se você estiver recebendo esse erro, em vez de um subtipo, isso provavelmente significa que Y
mudou a partir de um interface
a um class
ou vice-versa, ou que houve uma mudança em suas interfaces herdadas e classes implementadas.
A razão que você não está vendo qualquer saída getMessage()
é que IncompatibleClassChangeError
é um subtipo de lava.lang.Error
não java.lang.Exception
. Portanto, o catch
para Exception
não é captura-lo. Simplesmente copiando a linha println(e.getMessage())
para o próximo bloco catch deve corrigir isso.
Quando você imprime a mensagem de exceção, ele deve dizer mais sobre o que está causando o problema. Mas a causa raiz é que você precisa recompilar e / ou certifique-se que você está usando os mesmos arquivos JAR da biblioteca em tempo de compilação e tempo de execução.
Outras dicas
Esta questão lê como um dup de outra pergunta stackoverflow . A resposta a essa questão parece ter sido muito popular, por isso é provável que seja útil.
Como um aparte:. Você deve verificar se as classes que são usadas para compilar a sua aplicação são as classes que são usados ??para executar o aplicativo