ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java-在不阻止UI的情况下将大量项目添加到ListModel中

2019-12-01 18:04:36  阅读:124  来源: 互联网

标签:swing java


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

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

滞后的时间并不长-肯定是在目前可以使用的状态下,并不是真的像我想要的那样敏捷(因为需要更好的词.)我期望人们使用功能较弱的机器而不是我来运行该软件,尽管因此我对解决问题感兴趣.

其他详情:

>我已经对应用程序进行了概要分析,延迟肯定是由于添加/删除大量项目引起的.一个典型的步骤可能是看到添加或删除的项目数量从几到数百.例如,如果我在文本框中搜索字母“ x”,则大多数项目将被删除,因为很少有包含该字母的项目.如果我随后删除字母,则所有项目将再次添加.如果我搜索一个更通用的术语(例如“ the”),则可能只有几个项目被删除,因为其中大部分包含该术语.
>我不是直接处理字符串,但它们是由几个字符串组成的相对简单的对象(准确地说,歌曲是由标题,作者,歌词等组成的),并且都使用尽可能使用SoftReferences(因此,假定这些对象均未创建或销毁,它们不适合典型用户使用.)

解决方法:

这可能不是您要找的答案,但是我想知道您最好的解决方案是否就是不添加数百个项目.用户无法或不想滚动JList中的这么多项目,因此,最明智的举动是限制添加到合理数量(例如20个左右)的项目数量.

我认为这类似于文字处理程序在屏幕上显示文档或我过去使用的其他直接“查找”组件.如果文档很大,通常整个内容不会加载到内存中,而是以某种方式缓存到磁盘中.如果您别无选择,只能加载很多项目,则可以将模型的这一部分“脱机”,显示一个等待模式对话框,从EDT加载项目,然后使模型恢复在线,然后释放模式对话框.

标签:swing,java
来源: https://codeday.me/bug/20191201/2082403.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有