【问题标题】:Method sleep until event fired方法休眠直到事件触发
【发布时间】:2010-01-29 16:10:03
【问题描述】:

我有一个扑克框架,我正在尝试为其开发一个“玩家”。基本上,我正在实现一个对象,该对象实现了框架定义的 Player 接口。我试图在这个播放器上放置一个 GUI,游戏的工作方式是经销商在我的播放器上调用 act() 方法并期望返回类型为 Action。我遇到的问题是,一旦调用 act() 方法,我会更新 GUI(使用 Swing 编写)以显示可用选项,但是我现在需要在玩家选择选项之前不返回该方法。选项显示为 JButton,单击时由 actionListener 对象处理。在用户采取行动之前,如何使 act() 方法不返回?我需要线程休眠/等待,直到它被触发的事件唤醒,我不确定语法和最好的方法。有什么想法吗?

谢谢,

阿里

【问题讨论】:

    标签: java user-interface swing event-handling multithreading


    【解决方案1】:

    我认为这种方法是有缺陷的。 Act 方法不应该等待。相反,它应该在Player 实例上注册一个事件(我们称之为Acted 事件)。同时它应该启动一个计时器,比如 20 秒,如果在计时器用完之前没有引发Acted 事件,庄家应该让玩家自动弃牌(或过牌,视情况而定)并执行下一个玩家也一样。

    这只是我的想法,但请考虑一下。

    【讨论】:

    • 使用这个方法,庄家需要一种方法来提醒玩家轮到他们行动了,如果这个方法没有返回,那么玩家将需要一个对庄家的引用,以便他们可以发送动作向经销商执行。这会在我们的对象之间创建循环依赖
    【解决方案2】:

    如果我无法理解您的问题,您需要为此使用 ActionListener

    ActionListener 是在您希望在事件发生时得到警告的类中实现的接口。当代码的其他部分触发特定事件时,Action Listener 接口的抽象方法会警告此类。

    向你展示一个简短的答案并不容易,但我有一个 hello world 示例可以帮助你。

    http://java.sun.com/docs/books/tutorial/uiswing/events/actionlistener.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多