我正在創建一個Tic-Tac-Toe遊戲,其中網格中的正方形由我創建的稱爲Square的類來表示。它擴展了JButton,但是我添加了一個名爲的布爾字段,可按指出該按鈕是否可以在遊戲中按下。如果按鈕已經有一個字母,那麼它不能被按下。我想在我的actionPerformed()方法中實現代碼,該方法將檢查可按變量,並且如果可按爲假,它將不會更改正方形的字母。我在我的ActionEvent上使用了getSource()方法來給我一個被按下的正方形的引用。因此,我需要投入Object以輸入Square,以便我可以訪問其可按字段。但是當我這樣做時,出現以下錯誤:java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square
這對我來說沒有任何意義。在我需要每個廣場有一個可按字段之前,我使用了一個JButton,它工作得很好。但是因爲Square繼承了JButton,所以我認爲它也會起作用。我怎樣才能解決這個問題?Java:無法投射到自定義類
回答
JVM是告訴你真相:通過getSource()
返回的對象實際上是在一個JButton,並不是一個方形物體,儘管你上述聲明。所以事實是,您將ActionListener添加到JButton並且將而不是添加到Square對象。你需要檢查你的代碼,看看爲什麼會這樣。如果您需要更多幫助,則需要顯示此代碼。
編輯
幽州:
I looked into it and realized that my "Start" button was going through the same process, which is where the error came from.
謝謝你的更新。
這表明您對所有按鈕都使用了一個ActionListener,而您並不想這麼做。當然,所有井字遊戲按鈕都可以使用相同的偵聽器,但其他任何人都應該使用自己單獨的偵聽器對象,可能是通過匿名內部類。
我看着它,意識到我的「開始」按鈕正在經歷相同的過程,這是錯誤的來源。謝謝! – user3113531
@ user3113531:感謝您的更新。請參閱編輯以回答。 –
你可以在第一次點擊時使用.setEnabled(false)來禁用JButton,這將解決這個問題。但我同意HovercraftFullOfEels。
- 1. 將類投射到自定義類
- 2. 無法將MembershipUser投射到自定義類(ASP.NET)
- 3. 將對象投射到自定義類
- 4. 無法在vb.net中投射自定義listviewitem類
- 5. 無法投射到我的自定義配置節
- 6. 無法投射Java rawImageInputStream -imageIO
- 7. 爪哇 - 無法投射到子類
- 8. 無法投泛型列表到自定義列表類型
- 9. 將顯示對象投射到自定義類對象
- 10. 將自定義類投射到python中的字典
- 11. LinearLayout無法投射到android.widget.checkbox
- 12. Android:FutureTask無法投射到MyClass
- 13. .HashMap無法投射到android.database.Cursor
- 14. Foo無法投射到Foo
- 15. clojure.lang.LazySeq無法投射到clojure.lang.IFn
- 16. MockView無法投射到android.view.ViewGroup
- 17. 爲什麼我無法將ContactBody投射到SpriteKit中的自定義SKNode
- 18. 無法將EditText投射到自定義適配器中的TextView中
- 19. 如何顯式投射類型(自定義類)
- 20. 獨立投射自定義控件
- 21. 無法投射MS.Internal.NamedObject
- 22. 無法投射MapView
- 23. 無法投射Combobox.SelectedValue
- 24. 無法投射System.Runtime.Remoting.ObjectHandle
- 25. com.google.gson.internal.LinkedTreeMap無法投射
- 26. 無法投射C#
- 27. java.lang.ClassCastException:android.app.Application無法投射
- 28. 無法投型「MS.Internal.NamedObject」的對象,以自定義類型
- 29. Java自定義ListCellRenderer投射問題(包括SSCCE)
- 30. 無法在silverlight中投射類型isse
歡迎來到SO。請閱讀這些鏈接(http://stackoverflow.com/questions/how-to-ask http://sscce.org/),瞭解如何發佈問題。這樣你會得到更好的結果。提示(顯示一些代碼會有所幫助)。 http://stackoverflow.com/help/on-topic – OldProgrammer