【问题标题】:Java: Cannot Cast to Custom ClassJava:无法转换为自定义类
【发布时间】:2013-12-18 02:21:17
【问题描述】:

我正在创建一个井字游戏,其中网格中的一个正方形由我创建的一个名为 Square 的类表示。它扩展了 JButton,但我添加了一个名为 pressable 的布尔字段,用于说明是否可以在游戏中按下按钮。如果按钮已经有一个字母,那么它不能被按下。我想在我的 actionPerformed() 方法中实现代码来检查 pressable 变量,如果 pressable 为假,它不会改变正方形的字母。我在我的 ActionEvent 上使用 getSource() 方法来给我一个对按下的正方形的引用。因此,我需要将 Object 转换为 Square 类型,以便可以访问其 pressable 字段。但是当我这样做时,我收到以下错误:java.lang.ClassCastException: javax.swing.JButton cannot be cast to tic.tac.toe.Square 这对我来说毫无意义。在我需要每个方块都有一个 pressable 字段之前,我使用了一个 JButton,它工作得很好。但是由于 Square 继承了 JButton,我认为它也可以工作。我怎样才能解决这个问题?

【问题讨论】:

标签: java swing casting jbutton classcastexception


【解决方案1】:

JVM 告诉你真相:getSource() 返回的对象 实际上是一个 JButton 而 不是 一个 Square 对象,尽管你在上面说过。所以事实是,您将 ActionListener 添加到 JButton 而 not 到 Square 对象。你需要检查你的代码,看看为什么会这样。如果您需要我们的更多帮助,您需要出示此代码。


编辑
你说:

我查看了它并意识到我的“开始”按钮正在经历相同的过程,这就是错误的来源。

感谢您的更新。

这表明您对所有按钮都使用了一个 ActionListener,而您不想这样做。当然,所有井字游戏按钮都可以使用同一个侦听器,但任何其他按钮都应该使用自己单独的侦听器对象,可能是通过匿名内部类。

【讨论】:

  • 我查看了它并意识到我的“开始”按钮正在经历相同的过程,这就是错误的来源。谢谢!
  • @user3113531:感谢您的更新。请参阅编辑以回答。
【解决方案2】:

您可以在第一次单击 JButton 时使用 .setEnabled(false) 禁用它,这样可以解决此问题。但我同意 HovercraftFullOfEels。

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多