所以我用JavaFX构建了这个游戏,我对gui有一些问题。当用户单击按钮时,会触发它的事件处理程序。这是该事件处理程序的psudo代码:
When button is clicked
try to make a move
update the board with the new move
let the AI make a move
update the board with the ai's move
这里的问题是,只有在最后一行执行后才更新电路板,因此在人类玩家完成他或她之后你永远不会真正看到电路板。我已经阅读了一些关于使用
做gui的东西Platform.runLater(() -> {
});
但这似乎对我不起作用。我在这里缺少什么?
编辑这是我的代码:
@FXML
public void btnCell(ActionEvent actionEvent) {
disableAllButtonsDuringAITurn(board.getCells());
Node sourceNode = (Node) actionEvent.getSource();
String cellId = sourceNode.getId();
int row = Character.getNumericValue(cellId.charAt(3));
int col = Character.getNumericValue(cellId.charAt(4));
board = treeBuilder.getFlippedBoard(board, row, col, Cell.Black, Cell.White);
playTurn();
}
private void playTurn() {
updateView(board.getCells());
checkWinner();
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
MakeAIMove();
updateView(board.getCells());
updateAvailableMovesForHuman();
checkWinner();
if (!canHumanMakeTurn) {
playTurn();
}
}//Only here is the view updated.
答案 0 :(得分:1)
您正在使用一种连续方法在事件线程上进行AI移动。因此,JavaFX没有机会访问UI线程来进行更新。
在另一个帖子中创建。
new Thread(()-> {
AI logic;
Platform.runLater(() -> {
update UI after ai move
});
})