Java FX仅在事件处理程序完成时更新GUI

时间:2017-09-15 20:43:45

标签: java javafx

所以我用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.

1 个答案:

答案 0 :(得分:1)

您正在使用一种连续方法在事件线程上进行AI移动。因此,JavaFX没有机会访问UI线程来进行更新。

在另一个帖子中创建。

new Thread(()-> { 
     AI logic; 
     Platform.runLater(() -> {
         update UI after ai move
     });
})