2011-12-10 35 views
7

我在處理Play Framework項目時遇到了一個奇怪的錯誤。雖然我的項目運行時,我有時會得到一個ClassCastException,但錯誤是這樣的:在Play Framework中拋出的無法解釋的ClassCastException

ClassCastException occured : models.Person cannot be cast to models.Person

這時候我打電話了查找方法,如經常發生:

Person p = Person.find("name=?","Joe").first();

如果我重新啓動項目,問題就會消失,但只是暫時的。它使測試我的項目成爲一大痛苦。我該如何解決?

+0

我面臨同樣的問題。我相信這是與dev web服務器的「重新加載」功能相關的。它似乎壞了,或者我的機器配置不好。由於Play尚未成熟,我在第一個選項中下注。 –

+0

我在2.6.3中有同樣的問題。 – nemoo

+0

由於@HotLicks提到這可能是一個命名空間問題。我沒注意到我實際上有兩個'main.scala.html'文件(一個在子項目中),它引發了這個*運行時錯誤* - 所以改變文件名使它全部消失 –

回答

2

我已經經歷過這種錯誤,而在開發模式中播放,在兩種情況下(只要我能記得)。

  • 修改的實體並嘗試從緩存中恢復該實體類的對象的值。
  • ,同時重新加載頁面/應用程序的代碼

在這兩種情況下修復編譯錯誤或清除緩存解決問題編譯錯誤。

不是說這些是唯一的可能性,可能是你有其他問題。

+0

我也在開發模式中看過幾次。它通常在熱代碼更改後發生,即使是與實體無關的文件(您的情況下爲Person類)。 – chris

3

這很可能是因爲你已經在兩個不同的類加載器下加載了Person類。當一個類在兩個不同的類加載器中加載兩次時,它實際上是兩個不同的類。

(不幸的是,我不能告訴你/你怎麼可能這樣做。)

(它是一個有點好奇有問題上彈出你列出的語句。你肯定是?在那裏的存在也許你應該表現出異常回溯)

+0

我很漂亮確定這是它發生的地方 - 在我的本地工作區上運行項目時,會出現播放錯誤頁面,並以紅色突出顯示此聲明。當我編輯我的代碼,保存文件,然後返回到我的項目時,通常會發生此錯誤。 – torourke

+0

@torourke - 如果您在運行時動態編輯/編譯,那可以解釋它。 –

1

就我而言,這與應用Web界面的演變有關。有人提出a bug for this,但到目前爲止它還沒有收到開發團隊的任何關注。票上有一個補丁,但我沒有嘗試過,所以YMMV。

相關問題