2010-12-08 39 views
26

我試圖幫助另一位使用Netbeans的開發人員。當他在Netbeans(6.9.1)中運行或調試他的某些代碼時,他得到一個「不可編譯的源代碼」RuntimeException。我在Java方面非常有經驗,但我更習慣於IntelliJ,並且根本沒有使用過Netbeans。「不可編譯的源代碼」netbeans中的RuntimeException

我已經做了一些Google搜索,看起來Netbeans會編譯代碼,即使出現錯誤,然後拋出錯誤RuntimeException。 (相當不好的行爲國際海事組織,但我想有些人會覺得它有用。)我讓他完全重建項目沒有編譯錯誤,但RuntimeException似乎仍然發生。我認爲他在Netbeans內部有一些不好的緩存類數據。

2個問題:

  1. 什麼是清除緩存,這樣我們就可以找出的不可編譯的代碼是最好的方式是什麼?
  2. 是否有任何方法關閉此行爲,以便代碼不會運行/調試,除非一切都會編譯,因此這些RuntimeException將不會被注入到代碼中?

我已經用Google搜索了一下,但還沒有找到任何一個問題的答案。


更新:更多信息:

  1. 關閉 「在保存時編譯」 選項使問題消失。重新開啓CoS讓異常恢復。不幸的是,這不是一個解決方案,因爲CoS是一個非常有用的選項。
  2. http://netbeans.org/bugzilla/show_bug.cgi?id=182009似乎是最接近的錯誤報告,但它已被關閉爲「已解決不完整」。不幸的是,這個bug很難重現 - 當Java庫調用第三方庫時,發生了異常,所以在拋出異常時我們可以改變的地方沒有任何東西。代碼將工作數週,然後突然開始拋出這個錯誤,爲什麼沒有明顯的原因。
  3. 我們嘗試手動刪除整個構建目錄 - 仍然沒有修復。
+1

也發生在NetBeans 7.0.1中。 http://netbeans.org/bugzilla/show_bug.cgi?id=182009的狀態現在重新打開。 – OliBlogger 2011-10-21 10:14:04

+1

另請參閱[bug 178597](http://netbeans.org/bugzilla/show_bug.cgi?id=178597)和[bug 210053](http://netbeans.org/bugzilla/show_bug.cgi?id=210053) – user250343 2012-03-26 08:10:37

回答

35

我們終於找到了解決方案,但仍不太清楚爲何會出現這種情況。當你在Compile On Save中激活時,Netbeans生成第二組調試等級文件。這些文件存儲在$USER/.netbeans/var/cache/index/s*/java/*/classes

不知何故(不知道該如何)該目錄可能被損壞或無法更新。

如果關閉netbeans,請刪除$USER/.netbeans/var/cache/index和所有子目錄並重新啓動netbeans,這將清除緩存。如果你沒有編譯錯誤,你的問題應該在這一點上消失。

注意:$ USER是你的用戶目錄 - 在Windows 7上這通常是c:\Users\username,我猜在Unix上它會是~username

如果您收到此問題,請投票支持,評論,或添加信息:http://netbeans.org/bugzilla/show_bug.cgi?id=182009

5

我在NB 7.0.1經歷了同樣的問題,有線,我的錘子-IQ解決方案是使在一個錯字源代碼,運行帶有此錯誤的NB(儘管有錯誤消息)並且緩存的類已成功刪除。

1

實際上,你並不需要刪除整個索引文件夾。 當您打開netbeans並且您的項目文件夾處於活動狀態時。 Netbeans開始掃描文件併爲所有活動項目創建臨時項目文件夾(位於索引文件夾中)。如果您檢查index \ segments文件(它是一個文本文件,並且可以在記事本/(文本編輯器)中查看),您將能夠識別代表您的項目的文件夾。然後,您可以刪除這些文件夾並重新啓動netbeans。

*活動項目意味着是開放前的Netbeans是關閉這些項目。

3

我經歷了Linux Mint的納迪亞就此問題與Netbeans的7.2.1,但被難倒到緩存位置可能是 - 我的竟是位於

/home/USER/.cache/netbeans/7.2.1 

,而不是在文件夾的.netbeans。

如果你不知道在哪裏緩存位於特定的設置,只是去幫助>有關NetBeans菜單,它會告訴你正確的路徑。

2

意識到,原因是與其他發佈的解決方案不好緩存後,我通過將文件複製到另一個目錄,從NetBeans中刪除,然後重新添加它解決了這個問題。