首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后台呈现JavaFX 2图表

在后台呈现JavaFX 2图表
EN

Stack Overflow用户
提问于 2012-11-05 20:55:59
回答 3查看 2.4K关注 0票数 6

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

我使用的是JavaFX 2.2.1 (JDK7u6)。

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

对于这个特定的事件,我想向用户显示一个进度条,我希望这个进度条随着实际的图表生成而更新。

对于如何实现这一点,有什么建议或提示吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-13 04:46:00

这个问题在Oracle JavaFX论坛中得到了解决:Render charts in background

解决方案是有一个包含三个子任务的SaveChartsTask:

  1. 在离屏场景图中创建图表。
  2. 将每个离屏图表的快照保存到JavaFX图像中。
  3. 使用imageio例程将JavaFX图像导出到文件。

任务的workDone属性允许监视操作的过程。通过将全部工作拆分为子任务,尽可能将工作从JavaFX应用程序线程中分离出来,并根据需要使用CountDownLatches和BlockingQueues来同步操作,UI能够保持响应能力。

票数 5
EN

Stack Overflow用户

发布于 2012-11-05 21:43:33

因为您似乎是JavaFX-2的新手。我建议您阅读oracle文档中的JavaFX-2 Concurrency文章。

您的问题很容易解决,只需使用Task对象单独加载图表(例如,每个图表一个任务)。引用教程页面:

任务用于实现需要在后台线程上完成的工作逻辑。

由于任务实现了Work接口,因此您可以使用任务来探测它们的Worker.State。引用手册:

可重用的工作器将从取消、成功或失败状态转换回就绪状态。

这将解决您的反馈问题,因为您将始终能够知道任务是否仍在运行,因为Worker.State对象具有以下可能的状态:

  • CANCELLED
  • FAILED
  • READY
  • RUNNING
  • SCHEDULED
  • SUCCEEDED

至于进度条,您可以使用updateProgress(double done, double max)来设置任务进度,然后通过将ProgressBar.progressProperty()绑定到Task.progressProperty()来简单地设置进度条的进度。

编辑

回复您的评论:

问题在于,在这种情况下,在生成JavaFX图表时,在任务内部执行的工作,以及需要在JavaFX应用程序线程内部执行的代码

来自本教程:

改为使用javafx.concurrent包提供的JavaFX API,该包负责与UI交互的多线程代码,并确保此交互发生在正确的线程上。

这意味着在JavaFX对象中执行的代码已经在Task线程中执行。

我希望它能帮上忙。干杯

票数 1
EN

Stack Overflow用户

发布于 2013-02-13 04:11:43

要在jfx线程上运行JavaFX Task,可以将任务安排为使用Platform.runLater(myJFXTask);运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13232578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档