java - Java中等待玩家点击棋子

标签 java swing event-handling wait event-dispatch-thread

实现以下代码的正确方法是什么?我想要获取 takeTurn() 方法来等待玩家单击网格上与他想要选择的棋子相对应的按钮。 (Button 对象具有实例变量 int col, rowextend JButton。)

int selectedCol, selectedRow;

void takeTurn() {
    System.out.print(name + "'s turn. ");

    // Get player to select a piece
    selectedCol = -1;
    selectedRow = -1;
    while (selectedCol == -1 && selectedRow == -1) {
        try {
            wait(500);
        } catch (InterruptedException e) {

        }
    }
    System.out.println(selectedCol + " " + selectedRow);
}

@Override
public void actionPerformed(ActionEvent e) {
    Button b = (Button)e.getSource();
    selectedCol = b.col;
    selectedRow = b.row;
}

运行时给出线程“main”中出现异常java.lang.IllegalMonitorStateException

最佳答案

在 Swing 或 AWT(或大多数 UI 框架)中,永远不应该阻塞主事件线程。这将导致您的程序停止并看起来已崩溃或挂起。

相反,您需要根据传入事件监视程序的状态。

例如。

  • 下一个用户转动,休息内部变量
  • 使用过的点击件。维护对该作品的引用
  • 使用过点击(某些地方)。如果用户选择了棋子,那么该走棋是否有效?等等...

关于java - Java中等待玩家点击棋子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397896/

相关文章:

java - 从最高到最低排列数字

flutter - 如何为 Flutter 的 Material Slider Widget 添加新回调以访问触摸事件/非事件状态?

android - 动态创建按钮,我可以选择一个按钮并取消选择其他按钮吗?

java - 如何使用 eclipse 在 J2ME 中使用 bouncy caSTLe API?

java - lwuit java中html组件中的滚动条

java - Android Studio 调试时如何跳过代码?

Java - 等待空间或在一定时间后返回

java - JTable Swing 检索数据

java - JMenuItem 快捷键 Ctrl-C/Ctrl-V 或 Ctrl-Insert/Shift-Insert 不再起作用

python - 如何使用 Python 从 Selenium 的重定向链中获取中间 URL?