显然
Client.run()是在后台线程上执行,并调用
Controller.movePawn()(通过
refresh())更新UI。您无法在后台线程上更新UI。您需要在中包装用于更新UI的代码
Platform.runLater()。因此,如果没有完整的示例,很难说清楚,但是以该方法调用的特定顺序为例,看来您需要
public void movePawn(int x1, int y1, int x2, int y2) { Platform.runLater(() -> { Pawn pawnTemp = game.getBoard().getField(x1, y1).getPawn(); game.getBoard().getField(x1, y1).setPawn(null); game.getBoard().getField(x2, y2).setPawn(pawnTemp); refresh(); });}整个代码中可能存在类似的问题,但最重要的是您:
- 必须 执行更新FX Application Thread上的UI的代码
- 一定不要 在FX Application Thread上执行阻塞(或花费大量时间来运行)的代码。



