实现以下代码的正确方法是什么?我想要获取 takeTurn() 方法来等待玩家单击网格上与他想要选择的棋子相对应的按钮。 (Button
对象具有实例变量 int col, row
和 extend 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/