从工作线程调用时,JavaFX Node.snapshot()会冻结线程吗?

时间:2014-10-19 02:53:21

标签: java multithreading javafx-2

我需要向javafx.scene.canvas.Canvas写一个javafx.scene.image.WritableImage。我知道javafx.scene.Node中的snapshot()方法将执行此操作,并且当我在JavaFX应用程序线程上时,它工作得很好。

但我需要从使用javafx.concurrent包的工作线程执行此写操作。所以我有javafx.concurrent.Task<V>尝试从snapshot()方法中调用call()方法。尝试执行此操作时,线程在调用snapshot()时会冻结。

所以我的问题是,我是否允许从使用snapshot()包的工作线程中调用javafx.concurrent

1 个答案:

答案 0 :(得分:5)

尝试Platfrom#runLater()完全针对此类任务引入的内容: http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater(java.lang.Runnable)

Platform.runLater(new Runnable() {
    public void run() {
        myNode.snapshot(...)
    }
}

您可以从任何线程运行此代码,但可以根据需要在FX App Thread上调用snapshot()方法。