Die Nachricht java.lang.NoSuchMethodError interpretieren
Bekomme ich die folgenden Laufzeit-Fehlermeldung angezeigt (zusammen mit der ersten Zeile des stack-trace, welche Punkte zu Zeile 94). Ich versuche, herauszufinden, warum es sagt, dass keine solche Methode vorhanden ist.
java.lang.NoSuchMethodError:
com.sun.tools.doclets.formats.html.SubWriterHolderWriter.printDocLinkForMenu(
ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;
Ljava/lang/String;Z)Ljava/lang/String;
at com.sun.tools.doclets.formats.html.AbstractExecutableMemberWriter.writeSummaryLink(
AbstractExecutableMemberWriter.java:94)
Linie 94 von writeSummaryLink ist unten dargestellt.
FRAGEN
Was bedeutet "ILcom" oder "Z" zu bedeuten?
Warum gibt es vier Typen in Klammern
(ILcom/Sonne/javadoc/ClassDoc;Lcom/Sonne/javadoc/MemberDoc;Ljava/lang/String;Z)
und einer nach dem Klammern
Ljava/lang/String;
wenn die Methode printDocLinkForMenu klar hat fünf Parameter?
CODE DETAIL
Die writeSummaryLink Methode ist:
protected void writeSummaryLink(int context, ClassDoc cd, ProgramElementDoc member) {
ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
String name = emd.name();
writer.strong();
writer.printDocLinkForMenu(context, cd, (MemberDoc) emd, name, false); //94
writer.strongEnd();
writer.displayLength = name.length();
writeParameters(emd, false);
}
Hier ist die Methode, Zeile 94 ruft:
public void printDocLinkForMenu(int context, ClassDoc classDoc, MemberDoc doc,
String label, boolean strong) {
String docLink = getDocLink(context, classDoc, doc, label, strong);
print(deleteParameterAnchors(docLink));
}
InformationsquelleAutor der Frage dougkramer | 2010-05-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Abschnitt 4.3.2 der JVM Spec:
Vom Abschnitt 4.3.3, Methode Deskriptoren:
So,
(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z)
Ljava/lang/String;
übersetzt:
Einer Methode mit
int
ClassDoc
MemberDoc
String
undboolean
als Parameter, und das gibt einenString
. Beachten Sie, dass nur die Referenz-Parameter werden durch ein Semikolon getrennt, da das Semikolon ist Teil der Charakter-Darstellung.Also, um es zusammenzufassen:
Gibt es fünf Parameter (int, ClassDoc, MemberDoc, String, boolean) und einen return-Typ (String).
InformationsquelleAutor der Antwort JRL
Diese sind mapping-Typen für die einheimischen Arten. Sie finden hier eine übersicht hier.
Als zu deiner nächsten Frage:
Da bist du nicht der code ausgeführt wird Sie denken, die Sie ausführen möchten. Die eigentlich ausführen von code versucht, genau die Methode beschrieben in der Fehlermeldung, mit eigentlich fünf Parameter (
I
sollte separat gezählt) und einString
zurück geben, aber diese Methode existiert nicht in der runtime-classpath (während es in der compile-Zeit classpath), daher dieser Fehler. Siehe auch dieNoSuchMethodError
javadoc:So, überprüfen Sie, ob Sie wirklich die richtige version des Codes, als du gepostet hast in deiner Frage und mit den richtigen Abhängigkeiten in den Laufzeit-classpath und nicht mit doppelten unterschiedliche versionierte Bibliotheken in den classpath.
Update: die Ausnahme bedeutet, dass die tatsächlichen code ist (implizit) versuchen, verwenden Sie die Methode wie folgt:
Weil es erwartet wird eine
String
Ergebnis, während es erklärt wirdvoid
.InformationsquelleAutor der Antwort BalusC