在后台渲染JavaFX 2图表

Joa*_*eie 6 charts javafx-2

我有一个用于数据分析的应用程序.该应用程序的一个重要部分是能够根据组装的数据显示图表,并能够在一个批处理操作中导出大量任务.到目前为止,我已经使用了JFreeChart,但我想使用原生JavaFX图表,以便导出的图表看起来仍然与它们在应用程序中的屏幕上看起来相同.

我在JavaFX 2.2.1(jdk 7u6)上.

我能够在一个批处理中生成图表,但这意味着我必须冻结用户界面(UI),因为这些图表必须在JavaFX应用程序线程上呈现.我使用Platform.runLater(new Runnable(){...}); 命令,包含生成图表的代码.

如果我将每个单独的图表生成包装成一个Platform.runLater(new Runnable(){...}); GUI没有像以前那样冻结,但我也没有得到任何反馈,因为我无法检测到每个单独的图表何时生成(它们是在稍后阶段运行的,而我无法控制何时可能发生这种情况,据我所知,没有可用的回调.

对于此特定事件,我想向用户显示进度条,我希望此进度条与实际图表生成一起更新.

有关如何实现这一目标的任何建议或提示?

jew*_*sea 5

这个问题在Oracle JavaFX论坛主题中得到了解决:在后台渲染图表.

解决方案是使用带有三个子任务的SaveChartsTask:

  1. 在屏幕外场景图中创建图表.
  2. 将每个屏幕外图表的快照拍摄到JavaFX图像.
  3. 使用imageio例程将JavaFX图像导出到文件.

任务上的workDone属性允许监视操作过程.通过将整个工作分成子任务,尽可能地保持JavaFX应用程序线程的工作,并根据需要使用CountDownLatches和BlockingQueues来同步操作,UI能够保持响应.