相关疑难解决方法(0)

如何使用JAVAFX 2中的AreaChart绘制实时流数据 - 并发,动画,图表

要求 - 使用实时流数据构建动画AreaChart.也许每1秒绘制300个数据点.

详细信息 - 因此,我需要从医疗设备读取患者呼吸模式的实时流数据,并使用JavaFX中的AreaChart以波形方式显示它.我是JavaFX的新手,因此我构建了一个小型POC,以了解JavaFX中的并发和动画是如何工作的.

这个概念有效,我对基本测试感到满意,就实现功能而言.但是我对下面代码中的性能表示不满意.

在下面的工作代码中,我创建了一个单独的线程来模拟从医疗设备获取数据.该线程只生成一个随机数并将其添加到ConcurrentLinkedQueue.

JavaFX Application线程通过时间轴从队列中提取此数据,并将其添加到AreaChart系列.

这种类型为我提供了我需要的动画,并且在运行时添加了数据.您可以复制粘贴此代码并对其进行测试.它应该可以正常工作.

但性能并不令人印象深刻 - CPU使用率达到56% - 我的笔记本电脑上有一块Intel Core 2 Duo @ 2.53 GHZ和4GB内存.我的显卡是采用最新驱动程序的Mobile Intel 4 Series express.

如何改进此动画或绘制实时数据,以获得更好的性能?

注意:如果它是瓶颈,我愿意在动画上妥协.我对这里显示的实现开放了 http://smoothiecharts.org/,其中波形只是预构建,只是从右到左流式传输.

  import java.util.concurrent.ConcurrentLinkedQueue;
  import java.util.concurrent.ExecutorService;
  import java.util.concurrent.Executors;
  import java.util.logging.Level;
  import java.util.logging.Logger;
  import javafx.animation.Animation;
  import javafx.animation.KeyFrame;
  import javafx.animation.SequentialTransition;
  import javafx.animation.Timeline;
  import javafx.application.Application;
  import javafx.event.ActionEvent;
  import javafx.event.EventHandler;
  import javafx.scene.Group;
  import javafx.scene.Scene;
  import javafx.scene.chart.AreaChart;
  import javafx.scene.chart.NumberAxis;
  import javafx.scene.chart.XYChart.Series;
  import javafx.stage.Stage;
  import javafx.util.Duration;

  /**
   * A chart that fills in the area between a line …
Run Code Online (Sandbox Code Playgroud)

java concurrency charts javafx-2

15
推荐指数
1
解决办法
1万
查看次数

标签 统计

charts ×1

concurrency ×1

java ×1

javafx-2 ×1