实现以下代码的正确方法是什么?我想获取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;
}
运行给出
Exception in thread "main" java.lang.IllegalMonitorStateException
。 最佳答案
在Swing或AWT(或大多数UI框架)中,切勿阻塞主事件线程。这将导致您的程序停止运行并似乎崩溃或挂起。
相反,您需要根据传入的事件来监视程序的状态。
例如。
下次用户转身,休息内部变量
用过的点击片。保持对作品的参考
使用点击(某些位置)。如果使用选择了一块,移动是否有效?等等...