亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取java.lang.VerifyError的原因

獲取java.lang.VerifyError的原因

牛魔王的故事 2019-06-06 13:58:45
獲取java.lang.VerifyError的原因我正在調查以下情況java.lang.VerifyErrorjava.lang.VerifyError: (class: be/post/ehr/wfm/application/serviceorganization/report/DisplayReportServlet, method: getMonthData signature:  (IILjava/util/Collection;Ljava/util/Collection;Ljava/util/HashMap;Ljava/util/Collection;Ljava/util/Locale;Lorg/apache/struts/  util/MessageRe??ì′Mtì′M??w?€m?§w?€mp:?”M????                 at java.lang.Class.getDeclaredConstructors0(Native Method)                 at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357)                 at java.lang.Class.getConstructor0(Class.java:2671)當啟動部署servlet的JBOSS服務器時,就會發生這種情況。它是用JDK-1.5.0_11編譯的,我嘗試用JDK-1.5.0_15重新編譯它,但沒有成功。也就是說,編譯運行良好,但部署時會出現java.lang.VerifyError。當我更改方法名并得到以下錯誤時:java.lang.VerifyError: (class: be/post/ehr/wfm/application/serviceorganization/report/DisplayReportServlet, method: getMD signature:  (IILjava/util/Collection;Lj    ava/util/Collection;Ljava/util/HashMap;Ljava/util/Collection;Ljava/util/Locale;Lorg/apache/struts/util /MessageResources┬á├?├àN|├?├àN├üw┬?m├ow┬?mX#├?M|X├?M             at java.lang.Class.getDeclaredConstructors0(Native Method)             at java.lang.Class.privateGetDeclaredConstructors(Class.java:2357             at java.lang.Class.getConstructor0(Class.java:2671)             at java.lang.Class.newInstance0(Class.java:321)             at java.lang.Class.newInstance(Class.java:303)您可以看到,顯示了更多的方法簽名。實際的方法簽名是  private PgasePdfTable getMonthData(int month, int year, Collection dayTypes,                           Collection calendarDays,                           HashMap bcSpecialDays,                           Collection activityPeriods,                           Locale locale, MessageResources resources) throws   Exception {我已經試著用javap這給了這個方法應有的簽名。當我的其他同事簽出、編譯和部署代碼時,他們也會遇到同樣的問題。當構建服務器獲取代碼并在開發或測試環境(HPUX)上部署代碼時,也會發生相同的錯誤。此外,運行Ubuntu的自動測試機器在服務器啟動期間也會顯示相同的錯誤。應用程序的其余部分運行正常,只有一個servlet出現故障。任何去哪找的想法都會有幫助。
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

java.lang.VerifyError可能是針對運行時使用的不同庫進行編譯時的結果。

例如,當我試圖運行一個針對Xerces 1編譯的程序時,我遇到了這種情況,但是在類路徑上找到了Xerces 2。所需的類(在org.apache.*命名空間)在運行時找到,因此ClassNotFoundException曾.結果。對類和方法進行了更改,因此在運行時找到的方法簽名與編譯時的方法簽名不匹配。

通常,編譯器將標記方法簽名不匹配的問題。在裝入類時,jvm將再次驗證字節碼,并拋出VerifyError當字節碼試圖做一些不應該允許的事情時-例如調用返回的方法String,然后將返回值存儲在包含List.


查看完整回答
反對 回復 2019-06-06
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

java.lang.VerifyError是最糟糕的。

如果您的方法的字節碼大小超過了64 KB的限制,您將得到此錯誤;但是您可能已經注意到了這一點。

您是否100%確定這個類不存在于應用程序其他地方的類路徑中,可能在另一個JAR中?

此外,在您的堆棧跟蹤中,是源文件的字符編碼(utf-8?)這是對的嗎?


查看完整回答
反對 回復 2019-06-06
?
嗶嗶one

TA貢獻1854條經驗 獲得超8個贊

正如凱文·潘科所說,這主要是因為圖書館的變化。因此,在某些情況下,一個“干凈”的項目(目錄)和一個構建完成了。


查看完整回答
反對 回復 2019-06-06
  • 3 回答
  • 0 關注
  • 2284 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號