JavaFX - 关于子线程更新UI

之前看了篇blog学习了一下如何使用JavaFX多线程:

JavaFX如何做多线程编程

里面讲到用Task或者Service来启用FX子线程以更新界面。最近尝试了下用Task,但一直报错:

“Not on FX application thread”

研究了半天,发现Task类里面的call方法还是使用传统子线程做处理

只有successed, running, scheduled, cancelled, failed等方法才是使用JavaFX线程工作的

因此要更新UI,只要重写这些方法即可:

button.setOnAction((event) -> {

    new Thread(new Task() {

        // call方法里面的线程非JavaFX线程
        @Override
        protected Void call() throws Exception {
            button.setText("1xxx");  // 这里会报错
            return null;
        }

        @Override
        protected void succeeded() {
            button.setText("xxx");
            System.out.println(Thread.currentThread());

            super.succeeded();
        }

    }).start();

});

你可能感兴趣的:(JavaFX)