我得到以下运行时错误消息(以及堆栈跟踪的第一行,它指向第94行)。我试图弄明白为什么它说不存在这样的方法。
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)
第94行如下所示。
为什么括号里有四种类型(ILcom/sun/javadoc/ClassDoc; Lcom/sun/javadoc/MemberDoc; Ljava/lang/String; Z),括号后面有一种类型Ljava/lang/String;当方法printDocLinkForMenu明显有五个参数时?
代码详细信息
writeSummaryLink方法是:
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);
}
下面是第94行调用的方法:
public void printDocLinkForMenu(int context, ClassDoc classDoc, MemberDoc doc,
String label, boolean strong) {
String docLink = getDocLink(context, classDoc, doc, label, strong);
print(deleteParameterAnchors(docLink));
}
“ILcom”或“Z”是什么意思?
这些是本机类型的映射类型。你可以在这里找到一个概述。
Native Type | Java Language Type | Description | Type signature ---------------+--------------------+------------------+---------------- unsigned char | jboolean | unsigned 8 bits | Z signed char | jbyte | signed 8 bits | B unsigned short | jchar | unsigned 16 bits | C short | jshort | signed 16 bits | S long | jint | signed 32 bits | I long long | jlong | signed 64 bits | J __int64 | | | float | jfloat | 32 bits | F double | jdouble | 64 bits | D
此外,签名"L完全限定类;"
表示由该名称唯一指定的类;例如,签名"Ljava/lang/String;"
表示类java.lang.String
。此外,签名的前缀[
表示该类型的数组;例如,[I
表示int数组类型。
关于你的下一个问题:
为什么括号中有四种类型(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z),括号后有一种是Ljava/lang/String;当PrintDocLinkFormMenu方法明显有五个参数时?
因为你没有运行你认为正在运行的代码。实际运行的代码正试图调用错误消息中描述的方法,实际上有五个参数(应分别计算I
)和字符串
返回类型,但此方法在运行时类路径中不存在(在compiletime类路径中可用),因此出现此错误。另请参见NoSuchMethodError
javadoc:
如果应用程序试图调用类(静态或实例)的指定方法,而该类不再具有该方法的定义,则引发。
通常,编译器会捕捉到这个错误;只有在类的定义发生了不兼容的更改时,才会在运行时发生此错误。
因此,请验证您是否真的在运行问题中发布的正确版本的代码,并且在运行时类路径中使用了正确的依赖项,并且在类路径中没有重复的不同版本库。
更新:异常表示实际代码(隐式地)尝试使用如下方法:
String s = printDocLinkForMenu(context, cd, (MemberDoc) emd, name, false);
因为当它被声明为无效时,它期待一个String
结果。
JVM规范第4.3.2节:
Character Type Interpretation ------------------------------------------ B byte signed byte C char Unicode character D double double-precision floating-point value F float single-precision floating-point value I int integer J long long integer L<classname>; reference an instance of class S short signed short Z boolean true or false [ reference one array dimension
根据第4.3.3节,方法描述符:
一个方法描述符表示该方法使用的参数和它返回的值:
MethodDescriptor:
( ParameterDescriptor* ) ReturnDescriptor
因此
(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z)Ljava/lang/String
翻译为:
一种方法,使用
int
、ClassDoc
、MemberDoc
、String
和boolean
作为参数,并返回一个String
。请注意,只有引用参数用分号分隔,因为分号是其字符表示的一部分。
所以,总结一下:
为什么括号中有四种类型(ILcom/sun/javadoc/ClassDoc;Lcom/sun/javadoc/MemberDoc;Ljava/lang/String;Z),括号后有一种是Ljava/lang/String;当PrintDocLinkFormMenu方法明显有五个参数时?
有五个参数(int、ClassDoc、MemberDoc、String、boolean)和一个返回类型(String)。
下面是我与bugzilla集成的代码,我遇到了一个异常 例外是: 我已成功登录,但当我运行conn.executeMethod(报告)时;我犯了错误。 线程“main”java中出现异常。lang.NoSuchMethodError:org。阿帕奇。xmlrpc。解析器。XmlrP应答器。getErrorCause()Ljava/lang/Throwable;在org。阿帕奇。xmlrpc。客户X
问题内容: 以下段错误消息的正确解释是什么? 问题答案: 这是一个段错误,原因是跟随空指针试图查找要运行的代码(即在指令提取期间)。 如果这是一个程序,而不是共享库 运行(并重复给定的其他指令指针值)以查看错误发生的位置。更好的方法是,获得一个带有调试工具的内部版本,并在诸如gdb之类的调试器下重现该问题。 由于是共享库 不幸的是,您被水淹了。事后无法知道动态链接程序将库放置在内存中的位置。重现该
我正在调试一个Azure Web应用程序上无法解释的内存消耗。我花了很多时间使用dotmemory、perfview和诊断工具挖掘日志、内存转储,但仍然无法理解为什么我们的应用程序内存一整天都在稳步增长。 我在堆中验证了多次,以确保请求前后的应用程序对象/模块都被释放,上面的屏幕截图显示了这一点。 如果你能分享一些关于如何找到消耗内存的东西的建议,我会的
问题内容: 为简单起见,请设想这种情况,我们有一台2位计算机,它具有一对称为r1和r2的2位寄存器,并且仅适用于立即寻址。 假设位序列 00 表示 添加 到我们的CPU中。也 01 的装置将数据移动到R 1和 10组 的装置将数据移动到R2。 因此,这台计算机和一个汇编器都有一种汇编语言,其中的示例代码将像 简而言之,当我将此代码汇编成本地语言时,文件将类似于: 上面的12位是以下代码的本机代码:
本文向大家介绍解释Kafka可以接收的消息最大为多少?相关面试题,主要包含被问及解释Kafka可以接收的消息最大为多少?时的应答技巧和注意事项,需要的朋友参考一下 答:Kafka可以接收的最大消息大小约为1000000字节。
请向我解释为什么我总是得到这个错误: 显然,我只在开发模式下得到它,它不会在我的生产构建中发生,但这非常烦人,我根本不明白在我的开发环境中出现错误不会在prod上显示的好处--可能是因为我缺乏理解。 或者强制使用如下构造函数检测更改:: 但是为什么我总是遇到这个错误呢?我想了解它,这样我就可以避免这些黑客修复在未来。