我需要向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
?
答案 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()
方法。