调试java.lang.VerifyError

时间:2011-07-13 15:16:34

标签: java debugging

我收到了一个java.lang.VerifyError,在oracle的页面上它说它因为不一致或安全问题而被抛出。但这可能是一件非常糟糕的事情,我甚至不知道我在寻找什么,或者我应该在哪个班级看。

错误消息也没有澄清:

java.lang.VerifyError: (class: proto/lua/libraries/ProtoLib$Lib1, method: call signature: ()Lproto/lua/LuaValue;) Wrong return type in function

我应该注意哪些不一致?任何人都可以根据错误判断我应该在什么课程中看?

关于这些例外主题的任何一般性帮助/信息也将受到赞赏

编辑:我重写了很多Lua库,直到我得到这个错误,在各个方面都完美无缺,我使用Java SE 6 Update 26

编辑:整个错误:

java.lang.VerifyError: (class: proto/lua/libraries/ProtoLib$Lib1, method: call signature: ()Lproto/lua/LuaValue;) Wrong return type in function
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at proto.lua.libraries.LibFunction.bind(LibFunction.java:169)
    at proto.lua.libraries.LibFunction.bind(LibFunction.java:152)
    at proto.lua.libraries.ProtoLib.call(ProtoLib.java:26)
    at proto.lua.otherstuff.OneArgFunction.call(OneArgFunction.java:66)
    at proto.lua.LuaValue.load(LuaValue.java:1358)
    at proto.lua.RavenLua.standardGlobals(RavenLua.java:100)
    at proto.ProjectPROTO.<clinit>(ProjectPROTO.java:51)
Could not find the main class: proto.ProjectPROTO.  Program will exit.
Exception in thread "main" Java Result: 1

所有proto.xxx.xxx.xxx类都是源

的一部分

编辑:显然错误是因为我忘了一些@Override注释,不知道是什么让他们开始给出错误。

3 个答案:

答案 0 :(得分:6)

什么是完整堆栈跟踪?它应该显示哪个类正在调用该方法。可能原因是代码是针对编译它的库的不同版本执行的,并且这些库版本之间存在一些不兼容的更改(从错误消息看起来它是一个不同的方法返回类型)。 / p>

如果该错误不是关于任何库,而是关于您自己的代码,那么请执行干净的构建。编译器应该生成有关可能在运行时导致验证错误的所有事情的编译错误。或者,如果源代码是正确的,它应该正确重建所有类文件。

答案 1 :(得分:5)

java.lang.Verify错误的最大单一来源是依赖库与主应用程序之间的JVM版本不兼容。因此,如果您使用Java 5运行应用程序并且使用Java 6编译依赖库,则可能会遇到问题。我会开始研究用什么版本的Java来编译Protolib的版本?你正在使用。

答案 2 :(得分:1)

根据@ Perception的回答,但我想补充一下:

最常见的原因是您的运行时环境在编译环境中使用了不同的(较旧的)JVM版本。