【发布时间】:2011-02-05 05:04:16
【问题描述】:
我知道Java Swing中的GUI代码必须放在里面
SwingUtilities.invokeAndWait 或 SwingUtilities.invokeLater。
这种方式线程工作正常。
遗憾的是,在我的情况下,GUI 更新它的时间比后台线程要长得多。更具体地说:我更新了一个只有大约 400 个条目的 JTree,嵌套深度最大为 4,所以应该没什么可怕的,对吧?但有时需要一秒钟!我需要确保用户能够毫无延迟地输入 JTextPane。好吧,猜猜看,缓慢的 JTree 更新确实会导致 JTextPane 在输入期间出现延迟。仅在树更新后才会刷新。
我正在使用 Netbeans,并且凭经验知道 Java 应用程序可以更新大量信息,而不会冻结 UI 的其余部分。
怎么做?
注意 1:所有 DefaultMutableTreeNodes 都是在 invokeAndWait 之外准备的。
注意 2:当我将 invokeAndWait 替换为 invokeLater 时,树不会' t 得到更新。
注意 3:递归树扩展花费的时间最多。
注意 4:我正在使用自定义树单元渲染器,将尝试不使用并报告。
注意 4a:我的树单元格渲染器使用地图缓存和重用创建的 JTextComponents,具体取决于树节点(作为键)。
线索 1:哇! 如果不设置自定义单元格渲染器,它会快 10 倍。我想,我需要一些关于编写自定义树单元渲染器的好教程。遗憾的是,我需要自定义单元格渲染器。
This tutorial involving lazy loading might help, I'll work this through.
【问题讨论】:
-
如果你能发布一些代码就太好了。
-
您是否正在显示 JTree 的所有内容?如果没有,添加一个可以处理延迟加载的方法怎么样?
标签: java multithreading user-interface swing swingworker