实现以下代码的正确方法是什么?我想获取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;
}


运行给出Exception in thread "main" java.lang.IllegalMonitorStateException

最佳答案

在Swing或AWT(或大多数UI框架)中,切勿阻塞主事件线程。这将导致您的程序停止运行并似乎崩溃或挂起。

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

例如。


下次用户转身,休息内部变量
用过的点击片。保持对作品的参考
使用点击(某些位置)。如果使用选择了一块,移动是否有效?等等...

07-21 19:12