JavaFX

来源:互联网 发布:java bcd编码 编辑:程序博客网 时间:2024/05/16 01:07

之前看了篇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<Void>() {        // 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();});