java – Swing:当JTree更新花费太长时间并冻结其他GUI元素时该怎么办?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Swing:当JTree更新花费太长时间并冻结其他GUI元素时该怎么办?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1596字,纯文字阅读大概需要3分钟。
内容图文
![java – Swing:当JTree更新花费太长时间并冻结其他GUI元素时该怎么办?](/upload/InfoBanner/zyjiaocheng/783/6ee6269628554107b3cfda13eb373d1a.jpg)
我知道Java Swing中的GUI代码必须放在里面
SwingUtilities.invokeAndWait或SwingUtilities.invokeLater.
这样线程工作正常.
遗憾的是,在我的情况下,GUI更新了那个比后台线程花费更长时间的东西.更具体一点:我用大约400个条目更新一个JTree,嵌套深度最大为4,所以应该没什么可怕的,对吧?但它有时需要一秒钟!我需要确保用户能够无延迟地键入JTextPane.好吧,猜猜看,慢速JTree更新会在输入过程中导致JTextPane的延迟.只有在树更新后才会刷新.
我正在使用Netbeans并且凭经验知道Java应用程序可以更新大量信息而不会冻结UI的其余部分.
怎么做到呢?
注1:所有这些DefaultMutableTreeNodes都是在invokeAndWait之外准备的.
注2:当我用invokeLater替换invokeAndWait时,树不会更新.
注3:喜欢递归树扩展需要花费最多的时间.
注4:我正在使用自定义树单元格渲染器,将尝试不报告.
注4a:我的树形单元渲染器使用映射来缓存和重用创建的JTextComponents,具体取决于树节点(作为键).
CLUE 1:哇!如果不设置自定义单元格渲染器,它的速度要快10倍.我想,我需要很少的关于编写自定义树单元格渲染器的好教程.可悲的是,我需要一个自定义的单元格渲染器.
This tutorial involving lazy loading might help, I’ll work this through.
解决方法:
[缺少一些细节,例如:每次用户更新JTextPane时会发生什么类型的处理?整棵树正在重建吗?]
无论如何,过去对我有用的东西(当我因JTree更新而经历了显着的减速时)是我推出了自己的TreeModel.
大多数程序员选择使用DefaultTreeModel.这确实是一种在大多数情况下都能很好地运行的现成解决方案.但是,当需要更新树的重要部分时,它非常慢.显然,编写自己的TableModel比使用固定解决方案更有效,但它比你想象的要痛苦得多.
特别是,我的自定义树模型很快,因为它本身不构建任何树.它只是观察我的域模型,并通过从该模型中提取相关信息来计算对其调用的方法(getChild(),getParent(),…)的答案.试试吧.它就像一个魅力.
内容总结
以上是互联网集市为您收集整理的java – Swing:当JTree更新花费太长时间并冻结其他GUI元素时该怎么办?全部内容,希望文章能够帮你解决java – Swing:当JTree更新花费太长时间并冻结其他GUI元素时该怎么办?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。