簡體   English   中英

java.lang.ClassFormatError:在類文件“類名”中非本機或抽象的方法中缺少代碼屬性

[英]java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file “name of class”

我知道這個問題可能看起來很愚蠢,因為我不能提供很多關於它的信息,但我認為問題必須是某種錯誤......

我編寫了一個帶有 NetBeans 7.1 的 Java 程序,現在在嘗試運行時出現此錯誤。 10 分鍾前它完美運行,我沒有改變錯誤所指的類

這可能是某種 NetBeans 錯誤嗎? 也許這是一個眾所周知的問題?

在 NB 7.2 中也有這個異常

  • “清理構建”並重新啟動 NB 不起作用
  • 用最新的更新更新 NB 並執行“清理和構建”也不起作用。

所以我重命名了緩存目錄:

c:\Users\userabcd\AppData\Local\NetBeans\Cache\7.2\index\

啟動 NB,等待它完成“背景掃描”並按下“調試項目”,瞧。 緩存每隔一段時間就會損壞:-/

編輯:在下面添加了解決方案 B。

解決方案一

  1. 項目屬性
  2. 構建>>編譯
  3. 取消選中:保存時編譯
  4. 清潔和構建

注意事項一

  • 如果未選中“保存時編譯”,則此項目將不再有此問題。
  • 如果您喜歡“保存時編譯”功能的好處,您可以在清理和構建后重新檢查該選項,並繼續照常處理您的項目。
  • 保存時編譯旨在通過在保存對源代碼的更改時在后台不斷將 .java 文件重新編譯為 .class 文件來節省時間。 這樣,當您構建或運行您的項目時,大部分編譯工作已經完成,允許您快速運行和測試您的代碼,即使對於大型項目也是如此。
  • NetBeans 使用一些奇特的緩存和版本控制來避免每次保存文件時都必須重新編譯整個項目。 這就是為什么這里列出的其他解決方案通常會起作用的原因; 當它偶爾失敗時,它們是擊敗這個緩存和版本控制系統的方法,就像上面那樣。

解決方案B

  1. 創建空文件夾,例如 C:\\Temp\\mine
  2. 在 Target 中使用命令行參數為 NetBeans 創建一個新快捷方式: "C:\\Program Files\\NetBeans 8.2\\bin\\netbeans64.exe" --userdir "C:\\Temp\\mine"
  3. 當出現編譯錯誤(ClassNotFoundException、MethodNotFoundException 等...)時刪除C:\\Temp\\mine\\var\\cache

備注乙

  • 第一次您將丟失所有 NetBeans 設置。
  • 更容易解決由緩存錯誤引起的未來編譯錯誤。
  • 允許運行 NetBeans 的多個副本,每個用戶目錄一個。

我也有這個例外。 我的解決方案是:

  • 編輯並保存提到的類(.java 文件)
  • 清理和構建項目
  • 部署到tomcat服務器

我剛剛在 Netbeans 7.4 Beta 上遇到了這種情況。

我嘗試過的事情:

  • 重新啟動 Netbeans。
  • 清潔和建造。
  • 關閉 netbeans,重命名緩存目錄,啟動 netbeans 並等待掃描完成。

什么對我有用:

  • 使源文件可寫並保存無意義的更改(插入空格)。

我不知道為什么其他任何步驟都沒有修復錯誤。 如果我在重命名緩存目錄后進行了清理和構建,也許它會起作用?

這是一個非常令人沮喪的情況 - 希望這可以幫助某人(也許是未來的我?)。

JDK 對 ClassFormatError 說:

當 Java 虛擬機嘗試讀取類文件並確定該文件格式錯誤或無法解釋為類文件時拋出。

也許類文件已損壞。 我將做標准的 IT 支持聲明。 您是否嘗試過重新啟動 NetBeans?

希望有幫助

使用 Netbeans 7.1 做同樣的事情。 從事一個可以正常工作幾個月的項目。 現在我更改了一個使用 javax.persistence 持久化的 bean,現在拋出了這個異常。 恢復我的一些更改,清理並編譯項目,重新啟動整個系統:仍然是例外。 關於它的奇怪之處:生成的 .war 在另一台機器上的 Tomcat 中完美運行。


更新

今天我又遇到了同樣的問題,我想不起來怎么解決了,但我又找到了這個帖子。 ;)

半小時后,我找到了解決方案:只需更改屬性serialVersionUID值,重新部署應用程序,然后您可以將值更改為其原始值並再次重新部署 -> 工作。 似乎 Tomcat 將那個類藏在了內部深處——刪除工作目錄並沒有導致成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM