使用从磁盘上的数据解析的大型数据集更新JavaFX

时间:2017-05-23 17:44:25

标签: javafx concurrency

我有一个tableview,其中包含一个对象列表,它从硬盘驱动器上的文件中提取元数据。

该列表很容易长达5000个项目,并且必须在硬盘驱动器数据发生变化时进行更新。如果用户提供了另外的目录来构建数据集,也可以更新它。简而言之,tableview上的数据可能会定期更新。

我目前有一个处理所有更新的线程。它结合使用了几种不同的技术(会话之间的持久性,FileWalker用于添加新数据,WatchService用于在会话期间监视更新)。不幸的是,这个线程不是JavaFX线程,所以当我更新支持TableView的ObservableList时,我偶尔会得到一个ConcurrentModificationException

后台守护程序的基本形状是while ( true )循环,因为它会轮询更新可能来自的各个位置,并做出相应的反应。

Platform.runLater()无效似乎适用于此大型数据集。我尝试让后台线程保留要添加和删除的对象列表,然后通过阅读ObservableListaddMe列表请求javafx线程更新removeMe,但是没有&# 39;工作 - 在大量读取数据期间停止调用runLater()个线程,因此tableview不会更新6+分钟,直到后台线程读取完所有数据。只有在那之后才会最终调用runLater()。我通过检查一个更新请求是否已经挂起来避免调用不需要的runLater(),但是修剪请求的数量并没有对结果产生任何影响。

有没有办法在后台运行这样的持续运行的线程,并让它更新JavaFX UI的数据集?我觉得必须有某种方法来做到这一点,但我找不到任何可行的方法。

0 个答案:

没有答案