Cuando llegamos java.lang.NoSuchMethodError incluso cuando el tarro/clase tiene el particualar método

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

  •  20-08-2019
  •  | 
  •  

Pregunta

Estoy usando la biblioteca IText para facilitar la exportación a pdf en un applet.Durante la exportación de la llamada falla con el siguiente error:

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

Abrí la Itext jar/PdfPtable.class en JD Decompiler y confirmó que la clase ha completeRow como un método público.

Puede alguien explicar los posibles escenarios cuando un java.lang.NoSuchMethodError se produce incluso cuando jar/clase tiene?

Aquí está la traza de la pila;puede no ser muy útil ya que la mayoría de las llamadas son de nuestra aplicación específica.

Error al exportar a archivo CSV - java.lang.NoSuchMethodError:com.lowagie.texto.pdf.PdfPTable.completeRow()V
com.blox.tabla.acción.ExportToCSVAction.actionPerformed(ExportToCSVAction.java:193)
javax.el swing.AbstractButton.fireActionPerformed(Fuente Desconocida)
javax.el swing.AbstractButton$Controlador.actionPerformed(Fuente Desconocida)
javax.el swing.DefaultButtonModel.fireActionPerformed(Fuente Desconocida)
javax.el swing.DefaultButtonModel.setPressed(Fuente Desconocida)
javax.el swing.plaf.basic.BasicButtonListener.mouseReleased(Fuente Desconocida)
java.awt.Componente.processMouseEvent(Fuente Desconocida)
javax.el swing.JComponent.processMouseEvent(Fuente Desconocida)
java.awt.Componente.processEvent(Fuente Desconocida)
java.awt.Contenedor.processEvent(Fuente Desconocida)
java.awt.Componente.dispatchEventImpl(Fuente Desconocida)
java.awt.Contenedor.dispatchEventImpl(Fuente Desconocida)
java.awt.Componente.dispatchEvent(Fuente Desconocida)
java.awt.LightweightDispatcher.retargetMouseEvent(Fuente Desconocida)
java.awt.LightweightDispatcher.processMouseEvent(Fuente Desconocida)
java.awt.LightweightDispatcher.dispatchEvent(Fuente Desconocida)
java.awt.Contenedor.dispatchEventImpl(Fuente Desconocida)
java.awt.De la ventana.dispatchEventImpl(Fuente Desconocida)
java.awt.Componente.dispatchEvent(Fuente Desconocida)
java.awt.EventQueue.dispatchEvent(Fuente Desconocida)
java.awt.EventDispatchThread.pumpOneEventForFilters(Fuente Desconocida)
java.awt.EventDispatchThread.pumpEventsForFilter(Fuente Desconocida)
java.awt.EventDispatchThread.pumpEventsForHierarchy(Fuente Desconocida)
java.awt.EventDispatchThread.pumpEvents(Fuente Desconocida)
java.awt.EventDispatchThread.pumpEvents(Fuente Desconocida)
java.awt.EventDispatchThread.ejecutar(Fuente Desconocida)
com.lowagie.texto.pdf.PdfPTable.completeRow()V
com.blox.tabla.vista.GridTableModel$PdfExportWriter.writeNewLine(GridTableModel.java:7259)
com.blox.tabla.vista.GridTableModel.buildExportData(GridTableModel.java:3111)
com.blox.tabla.vista.GridTableModel.de exportación(GridTableModel.java:2541)
com.blox.tabla.vista.GridTable.de exportación(GridTable.java:1318)
com.blox.tabla.acción.ExportToCSVAction.exportToFile(ExportToCSVAction.java:248)
com.blox.tabla.acción.ExportToCSVAction.acceso$1(ExportToCSVAction.java:245)
com.blox.tabla.acción.ExportToCSVAction$Trabajador.exportToCSVFile(ExportToCSVAction.java:111)
sol.reflejar.NativeMethodAccessorImpl.invoke0(Native Method)
sol.reflejar.NativeMethodAccessorImpl.invoke(Fuente Desconocida)
sol.reflejar.DelegatingMethodAccessorImpl.invoke(Fuente Desconocida)
java.lang.reflejar.Método.invoke(Fuente Desconocida)
spin.Invocación.evaluar(Invocación.java:175)
spin.off.SpinOffEvaluator$1.ejecutar(SpinOffEvaluator.java:108)
java.lang.Subproceso.ejecutar(Fuente Desconocida)

¿Fue útil?

Solución 3

Descubrí que uno de los archivos jar de terceros incluía una versión anterior de la biblioteca iText

Otros consejos

Puede ser que aparezca una versión diferente en su classpath o que la firma de ese método en particular haya cambiado desde que compiló su clase

  1. Generalmente este tipo de problemas son causa si hay otra versión de la misma clase en su ruta de clase antes de la versión que se utiliza para compilar (y que descompilar como se dijo antes).Esto sucede a menudo como la ruta de clases de problemas son comunes, también con expertos, esp.en contenedores, donde el orden de las bibliotecas cargadas no está especificado.

    Así que digamos que el uso de iText 1.un a en el IDE y compilar en contra.Luego de implementar su aplicación en algunos contenedor, donde iText 1.b está preinstalado.Preinstalado bibliotecas tienen prioridad y cuando b < una, a continuación, ejecutar en este tipo de problema.

    En su caso no hay ningún contenedor, pero usted podría mezclar versiones de la biblioteca durante el embalaje/implementación o tienen diferentes rutas de clases para el desarrollo y la ejecución.

  2. El frasco no está en la ruta de clases en tiempo de ejecución, sólo en tiempo de compilación.Pero entonces usted recibirá un NoClassDefFoundError cuando iText se accede por primera vez, que no es el caso.

  3. Si iText sí echaría de menos una tercera parte de la biblioteca se obtendría un NoClassDefFoundError cuando se llama al método que requiere que el insatisfecha de dependencia.

Eso significa que dos versiones de la clase PdfPTable están en su ruta de clase. Dos archivos jar que está utilizando podrían haber empaquetado diferentes versiones de la misma clase. Una manera fácil de averiguarlo es hacer un jar -tf en los archivos jar en el classpath y grep para su nombre de clase. Elimine la versión obsoleta o cambie el orden de los archivos jar en su ruta de clase.

Estoy usando netbeans IDE y tuve este problema algunas veces. Por ejemplo, cuando cambié los parámetros de un método, ¡ya no funcionaba! Accidentalmente, entendí que después de cambiar el método, si hago clic derecho en el proyecto y presiono & Quot; clean & Quot ;, ¡ya no había ningún problema!

Tuve el mismo problema y presioné el botón Limpiar y construir proyecto y todo funciona muy bien ahora. Tal vez a veces el problema está bloqueado por versiones anteriores y necesita reconstruir.

También podría ser que aparezcan dos versiones del jar en su classpath de applet y que la que se cargó tenga una firma diferente a la que compiló su código

quizás haya otra versión de esta clase en su classpath antes de la versión que descompiló.
edit : O ha actualizado el paquete, pero ha olvidado implementarlo en su classpath en tiempo de ejecución o no ha actualizado la classpath de compilación, es decir, su entorno de tiempo de ejecución no está sincronizado con su tiempo de compilación.

public void completeRow() se introdujo en 2.0.5. debe tener una versión anterior a 2.0.5 en su classpath en tiempo de ejecución. Si todavía tiene este problema, estudie el classpath para el inicio del proceso. como se indicó anteriormente, está compilando con la versión 2.1.5.

Esto funcionó para mí.

Utilizo net beans IDE. Simplemente eliminé los archivos httpclient y core jar (estoy usando 4.2.1) y los volví a agregar. Eso pareció cambiar el orden y funcionó.

Agregando a " Last Paldin's " Respuesta que me ayudó.

Tenía un problema algo similar, en una investigación más profunda noté que un método de clase Table en un jar de terceros que había agregado estaba en conflicto con el método de tabla correspondiente del itext-2.0.4 jar. Así que eliminé el jar de terceros de la carpeta classpath y de las bibliotecas y ejecuté una reconstrucción limpia y ahora se renderiza perfectamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top