我试图建立" Stick Hero"使用javafx(JDK8)的棋盘游戏。我用
scene.setOnKeyPressed(e -> {
Thread thread = new Thread() {
@Override
public void run() {
if (e.getCode().equals(KeyCode.ENTER)) {
// do some graphical changes
playGame();
}
}
};
thread.start();
});
听键盘并按下输入,垂直线变成水平桥,人通过桥,这将继续,直到桥的长度与距离不匹配。现在我想在playGame()
方法运行期间更新UI。当我尝试执行scoreLabel.setText(String.valueOf(score));
并更新scoreLabel
文本时遇到Not on FX application thread
错误。 playGame()
类似于
for (int i = 0; i < cycle; i++) {
goOneCycle();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
fixPosition();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
并在goOneCycle();
和fixPosition();
我做了一些图形更改,但直到循环结束才显示。
现在我有两个问题。首先为什么我可以做scoreLabel.setLayoutX(500);
这样的事情,但我做不到scoreLabel.setText(String.valueOf(score));
我的意思是在第一种情况下我没有遇到Not on FX application thread
。我如何更新scoreLabel
文字。请注意,我已经尝试使用Platform.runLater()
但是当我使用此动画时,图形更改将不会显示在playGame()
方法中,并且只显示最终帧 - 所有动画都已完成,但它没有所示。