我们有一组场景,其意图是 - 在“安全”之后的某个时刻 - 将它们保存到图像文件中。 “安全”在这里意味着“完成一些后端工作后,以及幕后完全绘制/渲染。”
需要考虑FxApplication线程的单线程特性:所有与gui相关的工作都需要在FxApplication线程上进行。那么我不清楚如何进行任意需要访问图形上下文的gui相关操作。
javafx.application.Platform.runLater(runnable)
适用于短期操作。实际上,这就是我们如何启动单独的场景:每次调用runLater
时都有一个场景。这很好。
Task
专门用于长时间运行的操作。但 该如何与FxApplication线程互操作? 似乎没有任何“排队机制”让任务将工作重新进入FxApplication事件循环。
我们可能不会尝试从任务中执行与GUI相关的操作 - 这会违反FxApplication线程的职责 - 并导致竞争条件。
请注意,以下问题Platform.runLater and Task in JavaFX未解决此问题,因为显示了GUI操作:
bar.setProgress(counter/1000000.0);
是“内置”。我们需要做任意 gui操作。
...
因此,我们将非常感谢如何正确排列作品。
答案 0 :(得分:1)
以下方法是在“后台”中运行AFA运行GUI操作(只有一个GUI线程 - 因此GUI操作的“后台”任务是相对术语..)
更新信用@jewelsea获取方法的重要部分https://gist.github.com/jewelsea/5072743“在屏幕上渲染300个图表并将其保存到JavaFX中的文件中。”
Platform.runLater
Task
Platform.runLater
,其中包括:这种方法很有效:我可以看到窗口启动,然后在GUI仍然响应时发生后端操作:然后最终 - 一旦后端操作完成 - 然后执行额外的GUI操作。