2011-07-13 42 views
3

我得到一個java.lang.VerifyError,它在oracle的頁面上說它是由於不一致或安全問題而拋出的。但是這可能是一件很糟糕的事情,我甚至不知道我在找什麼或者我應該看哪些課。調試java.lang.VerifyError

的錯誤消息不明確的事情之一:

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

我應該是在尋找什麼矛盾?任何人都可以根據這個錯誤告訴我應該看哪一堂課?

對這些異常的話題任何一般幫助/信息,將太感謝

編輯:我重寫了大部分的Lua庫的,直到我得到這個錯誤,在每一個方面的工作完全正常,我使用Java SE 6的更新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類是p來源藝術

編輯:那麼明顯,因爲我忘了一些@Override註釋錯誤是造成的,不知道是什麼讓他們開始放棄,雖然錯誤。

+0

您正在使用哪種JVM和版本?如果您從某處下載了Lua JAR,是否檢查過它以確保它沒有損壞? –

+0

什麼是引發此錯誤的代碼? – Kal

+0

你是什麼意思,因爲這些類沒有編譯? Proto/lua/*類是這個項目的一部分,作爲源代碼而不是庫嗎? –

回答

5

什麼是完整的堆棧跟蹤?它應該顯示哪個類正在調用該方法。原因可能是代碼是針對它編譯的庫的不同版本執行的,並且這些庫版本之間存在一些不兼容的變化(來自錯誤消息,它似乎是不同的方法返回類型)。

如果這個錯誤不是關於任何庫,而是關於你自己的代碼,那麼做一個乾淨的構建。編譯器應該在運行時產生一個關於所有可能導致驗證錯誤的編譯錯誤。或者如果源代碼是正確的,它應該正確地重建所有類文件。

+0

乾淨的版本並沒有幫助,但不知怎的,想到'清理'讓我檢查所有失敗的類,我注意到那裏有一些類沒有@Override註解覆蓋方法,出於習慣,我修正了這個問題,只是爲了它,我再次運行我的代碼,現在VerifyError消失了。不知道發生了什麼,但謝謝! – Tim

4

java.lang.Verify錯誤的最大來源是JVM版本在您的相關庫和主應用程序之間不兼容。因此,如果您使用Java 5運行應用程序,並且依賴庫是使用Java 6編譯的,則可能會遇到問題。我會開始研究用什麼版本的Java來編譯Protolib的版本?您正在使用。

+0

Protolib沒有編譯和我使用的每個編譯庫一直工作到很好,半小時前 – Tim

+0

@Dasdasd - 等等,你說你的應用程序沒有改變任何方式,然後停止工作大約半小時之前,你發佈的問題?在這個窗口中必須有所改變,你能否擴展你的原始問題以包括它可能是什麼? – Perception

+0

基本上,我正在試圖通過讓他們擴展一個類('LuaUserdata')而不是創建一個新類並將它自己附加到它來結合我的一些工作類。這對4中的3個起作用,最後一個'部分'導致我的頭痛。 – Tim

1

按@感知的答案,但我想補充:

最通常的原因是你的運行環境使用不同的(舊的)版本的JVM,以你的編譯環境。

+0

奇怪的是,我沒有在代碼中使用編譯庫,我懷疑是由於錯誤導致 – Tim