【问题标题】:On which thread JavaFX change listeners are executed ?在哪个线程上执行 JavaFX 更改侦听器?
【发布时间】:2016-11-15 16:31:23
【问题描述】:

在以下文档更改监听器中添加的代码是否将始终在 JavaFX 应用程序线程中执行?

webEngineObject.documentProperty().addListener(new ChangeListener<Document>(){

                    @Override
                    public void changed(
                            ObservableValue<? extends Document> arg0,
                            Document arg1, Document arg2) {                     
                        //some code here
                    }

        });

或者我需要添加 Platform.runLater() 吗?

当我在那里遇到断点后查看线程堆栈时,看起来代码正在 JavaFX 应用程序线程本身中执行,但我想确认在文档中找不到任何关于此的评论。任何提到这一点的文档链接都会非常有帮助。

【问题讨论】:

    标签: java multithreading javafx javafx-2 javafx-webengine


    【解决方案1】:

    一般来说,更改侦听器在进行更改的同一线程上运行。当然,PropertyObservableValue 的实现可能会在另一个线程上调用侦听器,但据我所知,这种行为没有默认实现。

    所以简单的答案是 - 更改侦听器将在执行原始更改的任何线程上运行。
    话虽如此,如果该属性与 JavaFX 节点相关,则应该在 JavaFX 线程上调用原始更改,以防止“不在 FX 应用程序线程上”异常。

    【讨论】:

      【解决方案2】:

      是的,代码在 JFX-Thread 上运行。

      JavaFx Architecture Documentation 查看“Glass Windowing Toolkit -> Threads”部分

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        • 2019-06-04
        • 2013-12-17
        • 2010-10-10
        • 2016-06-02
        相关资源
        最近更新 更多