Platform.runLater()不适用于fx应用程序线程

时间:2015-07-01 10:22:17

标签: java multithreading javafx

我试图建立" 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()方法中,并且只显示最终帧 - 所有动画都已完成,但它没有所示。

0 个答案:

没有答案