Quando é que vamos chegar java.lang.NoSuchMethodError mesmo quando o jar / classe tem o método particular

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

  •  20-08-2019
  •  | 
  •  

Pergunta

Eu estou usando a biblioteca iText para facilitar a exportação pdf em um applet. Durante a chamada exportação falhar com seguinte erro:

java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow()V

Abri o frasco iText / PdfPtable.class em JD Decompiler e confirmou que a classe tem completeRow como um método público.

Alguém pode explicar os cenários possíveis quando um java.lang.NoSuchMethodError é jogado mesmo quando jar / classe tem isso?

Aqui está o rastreamento de pilha; não pode ser muito útil como a maioria das chamadas são a nossa aplicação específica.

Erro ao exportar para o arquivo CSV - java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow () V
com.blox.table.action.ExportToCSVAction.actionPerformed (ExportToCSVAction.java:193)
javax.swing.AbstractButton.fireActionPerformed (fonte desconhecida)
javax.swing.AbstractButton $ Handler.actionPerformed (fonte desconhecida)
javax.swing.DefaultButtonModel.fireActionPerformed (fonte desconhecida)
javax.swing.DefaultButtonModel.setPressed (fonte desconhecida)
javax.swing.plaf.basic.BasicButtonListener.mouseReleased (fonte desconhecida)
java.awt.Component.processMouseEvent (fonte desconhecida)
javax.swing.JComponent.processMouseEvent (fonte desconhecida)
java.awt.Component.processEvent (fonte desconhecida)
java.awt.Container.processEvent (fonte desconhecida)
java.awt.Component.dispatchEventImpl (fonte desconhecida)
java.awt.Container.dispatchEventImpl (fonte desconhecida)
java.awt.Component.dispatchEvent (fonte desconhecida)
java.awt.LightweightDispatcher.retargetMouseEvent (fonte desconhecida)
java.awt.LightweightDispatcher.processMouseEvent (fonte desconhecida)
java.awt.LightweightDispatcher.dispatchEvent (fonte desconhecida)
java.awt.Container.dispatchEventImpl (fonte desconhecida)
java.awt.Window.dispatchEventImpl (fonte desconhecida)
java.awt.Component.dispatchEvent (fonte desconhecida)
java.awt.EventQueue.dispatchEvent (fonte desconhecida)
java.awt.EventDispatchThread.pumpOneEventForFilters (fonte desconhecida)
java.awt.EventDispatchThread.pumpEventsForFilter (fonte desconhecida)
java.awt.EventDispatchThread.pumpEventsForHierarchy (fonte desconhecida)
java.awt.EventDispatchThread.pumpEvents (fonte desconhecida)
java.awt.EventDispatchThread.pumpEvents (fonte desconhecida)
java.awt.EventDispatchThread.run (fonte desconhecida)
com.lowagie.text.pdf.PdfPTable.completeRow () V
com.blox.table.view.GridTableModel $ PdfExportWriter.writeNewLine (GridTableModel.java:7259)
com.blox.table.view.GridTableModel.buildExportData (GridTableModel.java:3111)
com.blox.table.view.GridTableModel.export (GridTableModel.java:2541)
com.blox.table.view.GridTable.export (GridTable.java:1318)
com.blox.table.action.ExportToCSVAction.exportToFile (ExportToCSVAction.java:248)
com.blox.table.action.ExportToCSVAction.access $ 1 (ExportToCSVAction.java:245)
com.blox.table.action.ExportToCSVAction $ Worker.exportToCSVFile (ExportToCSVAction.java:111)
sun.reflect.NativeMethodAccessorImpl.invoke0 (Método Nativo)
sun.reflect.NativeMethodAccessorImpl.invoke (fonte desconhecida)
sun.reflect.DelegatingMethodAccessorImpl.invoke (fonte desconhecida)
java.lang.reflect.Method.invoke (fonte desconhecida)
spin.Invocation.evaluate (Invocation.java:175)
spin.off.SpinOffEvaluator $ 1.run (SpinOffEvaluator.java:108)
java.lang.Thread.run (fonte desconhecida)

Foi útil?

Solução 3

Eu descobri que um dos o terceiro frasco partido foi agregação de uma versão mais antiga do biblioteca iText

Outras dicas

Pode ser que um diferente aparece versão no seu classpath ou que a assinatura desse método particular mudou desde o seu compilado sua classe

  1. Normalmente, esses problemas são porque se há uma outra versão da classe ofender no seu classpath antes da versão que você usou para compilação (e que você compilado como disse antes). Isso acontece muitas vezes como questões de classpath são comuns, também com especialistas, esp. em recipientes, em que a ordem de bibliotecas carregadas não é especificado.

    Então, digamos que você usa iText 1.a no seu IDE e compilar contra. Em seguida, você implantar seu aplicativo em algum recipiente, onde iText 1.b vem pré-instalado. bibliotecas pré-instalados têm precedência e quando b

    No seu caso não há nenhum recipiente, mas você pode misturar versões de bibliotecas durante o acondicionamento / implantação ou têm diferentes caminhos de classe para o desenvolvimento e execução.

  2. O frasco não está no classpath em tempo de execução, somente em tempo de compilação. Mas então você teria um NoClassDefFoundError quando iText é acessado pela primeira vez, que não é o caso.

  3. Se iText si perderia uma biblioteca de terceiros que você também teria uma NoClassDefFoundError ao chamar o método que precisa da dependência não satisfeita.

Isso significa que duas versões da classe PdfPTable estão em seu caminho de classe. Dois arquivos jar que você está usando pode ter embalado diferentes versões da mesma classe. Fácil maneira de descobrir é fazer uma -tf jar sobre os arquivos jar no classpath, e grep para o seu nome de classe. Remova a versão obsoleto ou alterar a ordem dos arquivos jar no caminho de classe.

Eu estou usando o NetBeans IDE e eu tive esse problema algumas vezes. por exemplo, quando eu mudei os parâmetros de um método, ele não funciona mais! Acidentalmente, entendi que depois de mudar o método, se eu botão direito sobre o projeto e pressione "limpa", não havia nenhum problema mais!

Eu tive o mesmo problema e eu bati o Clean and botão Construir projeto e tudo funciona muito bem agora. Talvez, por vezes, o problema está preso a partir de construções anteriores e você precisa para reconstruir.

Pode ser também que duas versões do frasco aparecer no seu caminho de classe applet e aquele que foi carregado tem uma assinatura diferente do que aquele que o código foi compilado com

talvez haja uma outra versão desta classe no seu classpath antes da versão que você compilado.
Editar : ou você tiver atualizado o pacote, mas se esqueceu de qualquer implantá-lo no classpath de tempo de execução ou você ainda não atualizou o classpath de compilação, ou seja, sua env tempo de execução está fora de sincronia com o seu env compiletime.

public void completeRow() foi introduzido no 2.0.5. você deve ter uma versão antes 2.0.5 no seu classpath de tempo de execução. se você ainda estiver enfrentando esse problema, por favor estudar o classpath para o arranque do processo. Como dito antes, você está compilando com a versão 2.1.5.

Isso funcionou para mim.

Eu uso IDE feijão net. Eu simplesmente excluídos os httpclient e núcleo arquivos jar (estou usando 4.2.1) e re-added-los. Isso pareceu alterar a ordem e funcionou.

Adicionando a Resposta "no último Paldin" que me ajudou.

Tive um problema um pouco semelhante, na investigação mais profunda notado que um método de classe da tabela em um terceiro frasco festa que eu tinha adicionado estava em conflito com itext-2.0.4 método de tabela correspondente do frasco. Então eu removi o 3º frasco partido da pasta classpath e Bibliotecas e executar um limpa reconstruir e agora torna perfeitamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top