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

使用从磁盘上的数据解析的大型数据集更新JavaFX,javafx,concurrency,Javafx,Concurrency,我有一个包含对象列表的tableview,它从硬盘上的文件中提取元数据 该列表很容易有5000个条目,并且必须在硬盘驱动器数据更改时随时更新。如果用户提供了用于构建数据集的附加目录,则还可以对其进行更新。简而言之,tableview上的数据可能会定期更新 我目前只有一个线程来处理所有更新。它结合使用了几种不同的技术(会话之间的持久性、添加新数据的FileWalker和会话期间监视更新的WatchService)。不幸的是,这个线程不是JavaFX线程,所以当我更新支持TableView的Obse

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

该列表很容易有5000个条目,并且必须在硬盘驱动器数据更改时随时更新。如果用户提供了用于构建数据集的附加目录,则还可以对其进行更新。简而言之,tableview上的数据可能会定期更新

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

后台守护进程线程的基本形状是一个
while(true)
循环,因为它轮询更新可能来自的各个地方,并做出相应的反应

Platform.runLater()。我试着让后台线程保留一个要添加和删除的对象列表,然后请求javafx线程通过读取
addMe
removeMe
列表来更新
observeList
,但这不起作用--
runLater()
线程在大量数据读取期间停止被调用,因此,在后台线程读取完所有数据之前,tableview在6分钟内不会更新。只有在这之后,才能最终调用runLater()。我通过检查是否有一个更新请求已挂起来避免调用不必要的runLater(),但是修剪请求的数量对结果没有任何影响


有没有办法让这样一个线程在后台持续运行,并让它为JavaFXUI更新数据集?我觉得一定有办法做到这一点,但我找不到任何有效的方法

您的描述实际上只是暗示您对线程的管理不正确。如果没有一个实际的代码示例,就不可能提供帮助-没有人能够诊断代码描述。这似乎没有得到任何回答,所以我尝试概括这个问题,使其更易于阅读和理解。好的,足够公平。但对于这两个问题,主要的一点仍然站得住脚:没有办法回答任何一个问题。问题可能出现在线程实现的某些部分,这两种情况都不包括在内。您已经充分描述了解决方案(后台线程循环和轮询更改,在更新发生时通过
Platform.runLater()
向FX应用程序线程提交更新)。\n淹没FX应用程序线程:这方面有一些问题。尝试其他方法,但基本思想是将更改放入队列中,并不时使用队列。