gpt4 book ai didi

java - 在不阻塞 UI 的情况下将大量项目添加到 ListModel

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:54 27 4
gpt4 key购买 nike

我已经使用 Lucene 在 JList 中实现了对大量项目(数百个)的搜索 - 当有人在搜索框中键入内容时,它会执行搜索并将结果显示在 JList 中。它通过在键入每个字符时从底层 JList 模型中添加和删除项目来实现这一点,但这种方法会阻塞 UI(因为必须在 EDT 上向 ListModel 添加内容。)搜索非常快,但它是添加和删​​除需要时间的项目。

在修改模型时,我将如何解决不阻止 EDT 的问题?

滞后时间并不长 - 它肯定处于目前可用的状态,只是不像我想要的那样活泼(需要一个更好的词。 ) 我希望人们在比我的机器功能更弱的机器上运行该软件,因此我有兴趣对问题进行排序。

其他细节:

  • 我已经分析了应用程序,延迟肯定是由添加/删除大量项目引起的。一个典型的步骤可以看到任意数量的项目被添加或删除,从几个到数百个。例如,如果我在文本框中搜索字母“x”,那么大部分项目将被删除,因为很少有项目包含该字母。如果我然后删除字母,所有项目将再次添加。如果我搜索一个更常见的词,例如“the”,那么只有少数项目可能会被删除,因为其中大部分都包含该词。

  • 我不直接处理字符串,但它们是由几个字符串组成的相对简单的对象(准确地说,歌曲由标题、作者、歌词等组成),并且它们在可能的情况下都使用 SoftReferences 进行缓存(因此假设没有创建或销毁这些对象,它们不应该用于典型用户。)

最佳答案

这可能不是您正在寻找的答案,但我想知道您最好的解决方案是否就是不添加数百个项目。用户不可能或不想滚动浏览 JList 中的这么多项目,因此最明智的做法可能是将添加的项目数量限制在一个合理的数量,比如 20 左右。

我认为这类似于在屏幕上显示文档的文字处理器或我过去使用过的其他即时“查找”组件。如果文档很大,通常不会将整个文档加载到内存中,而是以某种方式缓存到磁盘中。如果你别无选择,只能加载很多项目,那么也许你可以让模型的这一部分“离线”显示等待模式对话框,从 EDT 加载项目,然后让模型重新上线,然后释放模态对话框。

关于java - 在不阻塞 UI 的情况下将大量项目添加到 ListModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9556299/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com