Utilizzando la postagger Stanford in java, ottenendo java.lang.IncompatibleClassChangeError

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

  •  19-09-2019
  •  | 
  •  

Domanda

Sto cercando di inizializzare la NLP Parte Stanford of Speech tagger e continuo a ricevere un java.lang.IncompatibleClassChangeError. Quando stampo la causa dell'errore, ottengo nulla, quando stampo il messaggio che ricevo classe di implementazione.

Questo è il mio codice:

    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();
    }

}

Qualcuno sa come risolvere questo problema?

È stato utile?

Soluzione

Un IncompatibleClassChangeError accade quando qualche classe X è stato compilato con una versione di qualche altra Y classe, e quindi viene eseguito un tentativo di caricare con una versione diversa (incompatibile) del Y classe. Se hai trovato questo errore, piuttosto che un sottotipo, probabilmente significa che Y è cambiato da un interface ad un class o viceversa, o che ci sia stato un cambiamento nelle sue interfacce ereditate e classi implementate.

La ragione per cui non si è visto alcun output getMessage() è che IncompatibleClassChangeError è un sottotipo di lava.lang.Error non java.lang.Exception. Quindi il catch per Exception non sta prendendo esso. Semplicemente copiando la linea println(e.getMessage()) al successivo blocco catch dovrebbe risolvere il problema.

Quando si stampa il messaggio di eccezione, dovrebbe dirvi di più su ciò che sta causando il problema. Ma la causa principale è che è necessario ricompilare e / o assicurarsi che si sta utilizzando gli stessi file JAR di libreria in fase di compilazione e di esecuzione.

Altri suggerimenti

Questa domanda si legge come un DUP di un'altra domanda StackOverflow . La risposta a questa domanda sembra essere stato piuttosto popolare, quindi è probabile che sia utile.

Per inciso:. È necessario verificare che le classi che vengono utilizzati per compilare la vostra applicazione sono le classi che vengono utilizzate per eseguire l'applicazione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top