Quand obtenons-nous java.lang.NoSuchMethodError même lorsque la classe / jar a la méthode particulière

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

  •  20-08-2019
  •  | 
  •  

Question

J'utilise la bibliothèque IText pour faciliter l'exportation au format PDF dans une applet. Lors de l'appel d'exportation, il échoue avec l'erreur suivante:

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

J'ai ouvert le fichier Itext / PdfPtable.class dans JD Decompiler et confirmé que la classe utilisait completeRow en tant que méthode publique.

Quelqu'un peut-il expliquer les scénarios possibles lorsqu'un java.lang.NoSuchMethodError est lancé même lorsque le fichier jar / la classe l'a?

Voici la trace de la pile; peut ne pas être très utile car la plupart des appels sont spécifiques à notre application.

  

Erreur lors de l'exportation dans le fichier CSV - java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfPTable.completeRow () V
     com.blox.table.action.ExportToCSVAction.actionPerformed (ExportToCSVAction.java:193)

     javax.swing.AbstractButton.fireActionPerformed (Source inconnue)
     javax.swing.AbstractButton $ Handler.actionPerformed (Source inconnue)
     javax.swing.DefaultButtonModel.fireActionPerformed (Source inconnue)
     javax.swing.DefaultButtonModel.setPressed (Source inconnue)
     javax.swing.plaf.basic.BasicButtonListener.mouseReleased (Source inconnue)
     java.awt.Component.processMouseEvent (Source inconnue)
     javax.swing.JComponent.processMouseEvent (Source inconnue)
     java.awt.Component.processEvent (Source inconnue)
     java.awt.Container.processEvent (source inconnue)
     java.awt.Component.dispatchEventImpl (Source inconnue)
     java.awt.Container.dispatchEventImpl (Source inconnue)
     java.awt.Component.dispatchEvent (Source inconnue)
     java.awt.LightweightDispatcher.retargetMouseEvent (Source inconnue)
     java.awt.LightweightDispatcher.processMouseEvent (Source inconnue)
     java.awt.LightweightDispatcher.dispatchEvent (Source inconnue)
     java.awt.Container.dispatchEventImpl (Source inconnue)
     java.awt.Window.dispatchEventImpl (Source inconnue)
     java.awt.Component.dispatchEvent (Source inconnue)
     java.awt.EventQueue.dispatchEvent (Source inconnue)
     java.awt.EventDispatchThread.pumpOneEventForFilters (Source inconnue)
     java.awt.EventDispatchThread.pumpEventsForFilter (Source inconnue)
     java.awt.EventDispatchThread.pumpEventsForHierarchy (Source inconnue)
     java.awt.EventDispatchThread.pumpEvents (Source inconnue)
     java.awt.EventDispatchThread.pumpEvents (Source inconnue)
     java.awt.EventDispatchThread.run (Source inconnue)
  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éthode native)
     sun.reflect.NativeMethodAccessorImpl.invoke (Source inconnue)
     sun.reflect.DelegatingMethodAccessorImpl.invoke (Source inconnue)
     java.lang.reflect.Method.invoke (Source inconnue)
     spin.Invocation.evaluate (Invocation.java:175)
     spin.off.SpinOffEvaluator $ 1.run (SpinOffEvaluator.java:108)
     java.lang.Thread.run (Source inconnue)

Était-ce utile?

La solution 3

J'ai découvert qu'un des fichiers tiers hébergeait une ancienne version de la bibliothèque iText

.

Autres conseils

Il se peut qu'une version différente apparaisse dans votre chemin de classe ou que la signature de cette méthode particulière ait changé depuis la compilation de votre classe

  1. Généralement, de tels problèmes sont la cause s'il existe une autre version de la classe incriminée dans votre chemin d'accès aux classes avant la version que vous avez utilisée pour la compilation (et que vous avez décompilé comme indiqué précédemment). Cela se produit souvent car les problèmes de parcours de classe sont courants, même avec les experts, en particulier. dans des conteneurs, où l'ordre des bibliothèques chargées n'est pas spécifié.

    Disons que vous utilisez iText 1.a dans votre IDE et que vous compilez. Ensuite, vous déployez votre application dans un conteneur, où iText 1.b est préinstallé. Les bibliothèques préinstallées ont priorité et quand b & Lt; puis vous rencontrez ce genre de problème.

    Dans votre cas, il n'y a pas de conteneur, mais vous pouvez mélanger les versions de la bibliothèque lors du packaging / déploiement ou utiliser différents chemins de classes pour le développement et l'exécution.

  2. Le fichier jar ne se trouve pas dans le chemin de classe au moment de l'exécution, mais au moment de la compilation. Mais alors vous obtiendrez un NoClassDefFoundError lorsqu’on aura accès à iText pour la première fois, ce qui n’est pas le cas.

  3. Si iText lui-même manque une bibliothèque tierce, vous obtiendrez également un <=> lors de l'appel de la méthode nécessitant une dépendance non satisfaite.

Cela signifie que deux versions de la classe PdfPTable se trouvent dans votre chemin de classe. Deux fichiers JAR que vous utilisez peuvent avoir des versions différentes de la même classe. Un moyen facile à comprendre est de faire un jar -tf sur les fichiers jar dans le chemin de classe et grep pour votre nom de classe. Supprimez la version obsolète ou modifiez l’ordre des fichiers jar dans votre chemin de classe.

J'utilise netbeans IDE et j'ai eu ce problème parfois. Par exemple, lorsque j'ai modifié les paramètres d'une méthode, cela ne fonctionnait plus! J'ai accidentellement compris qu'après avoir changé de méthode, si je cliquais avec le bouton droit de la souris sur le projet et appuyais sur & "Nettoyer &", Il n'y avait plus de problème!

J'ai eu le même problème et j'ai cliqué sur le bouton Projet Clean and Build et tout fonctionne parfaitement maintenant. Peut-être que parfois le problème est bloqué par les versions précédentes et que vous avez besoin de reconstruire.

Il est également possible que deux versions du fichier jar apparaissent dans le chemin d'accès aux classes de votre applet et que celle qui a été chargée porte une signature différente de celle avec laquelle votre code a été compilé

il existe peut-être une autre version de cette classe dans votre chemin de classe avant la version que vous avez décompilée.
modifier : ou vous avez mis à jour le package, mais vous avez oublié de le déployer sur votre chemin de classe d'exécution ou vous n'avez pas mis à jour le chemin de classe de compilation, c'est-à-dire que votre environnement d'exécution est désynchronisé avec votre env. compiletime

public void completeRow() a été introduit dans la version 2.0.5. vous devez avoir une version antérieure à 2.0.5 dans votre chemin d'accès aux classes d'exécution. Si vous rencontrez toujours ce problème, veuillez étudier le chemin de classe pour le démarrage du processus. comme indiqué précédemment, vous compilez avec la version 2.1.5.

Cela a fonctionné pour moi.

J'utilise net beans IDE. J'ai simplement supprimé les fichiers jar httpclient et core (j'utilise 4.2.1) et les ai rajoutés. Cela a semblé changer l'ordre et cela a fonctionné.

Ajout à " Last Paldin " Réponse qui m'a aidé.

Si vous rencontriez un problème similaire, une enquête plus approfondie a permis de constater qu’une méthode de classe Table dans un fichier jar tiers, j’avais ajouté, était en conflit avec la méthode de table correspondante de itext-2.0.4 jar. J'ai donc supprimé le fichier jar tiers du classpath et du dossier Libraries et procédé à une reconstruction propre. Le rendu est désormais parfait.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top