【问题标题】:Java JTable with frequent update?Java JTable 频繁更新?
【发布时间】:2013-07-30 03:39:02
【问题描述】:

我正在编写一个能够处理频繁更新的 JTable。通常这个 JTable 有大约 1000 行数据,并且一些列会经常更新,因为它们的值是从股票价格得出的,股票价格在市场交易时间波动很大。

我面临的问题是,当大量行(例如 80%)正在更新时,JTable 变得非常慢 20-30 秒左右,分析器显示 EDT 线程非常繁忙,正在处理tableChanged 调用。

我尝试通过以下方式折叠更改 1) 抑制 fireTableCellUpdated 2) 如果有 50 行的更改,则为整个表调用 fireTableDataChanged。

比较好,但是频繁更新还是很慢,我的理解是fireTableDataChanged也很慢。所以如果数据更新足够频繁,fireTableDataChanged 会被频繁调用,GUI 会感觉迟钝。

有这方面经验的人可以推荐一个使用 fireTableRowsUpdate 的最佳实践吗? fireTableDataChanged 和 fireTableStructureChanged 来提高 GUI 的活力和性能?如果您有解决此问题的示例代码的指针,那就更好了。

非常感谢

安东尼斯

【问题讨论】:

  • @Anthony Si:除了我的回答,我想指出,频繁的事件并不是唯一的问题。可怕的、非常缓慢的默认 JTable/header/cells(重新)绘制性能是您遇到的问题的一个重要部分,这一切都在我在回答中给您的链接中进行了解释。

标签: java user-interface swing jtable


【解决方案1】:

我已经做到了,事实上,即使在强大的设置上,默认的 JTable 性能也非常糟糕。但是所有的希望都不会消失:使用(相当)一些技巧,您可以获得可接受的性能。

基本上,Oracle 有一个专门用于此目的的教程,称为“圣诞树”。

来吧,“如何创建经常更新且性能良好的 JTable”:

http://www.oracle.com/technetwork/java/christmastree-138396.html

我发现真正令人惊奇的一件事是不断显示使用的内存:您可能想要这样做。

您会惊讶于默认的 JTable 生成了多少不必要的废话,这会减慢一切速度,并且当然会使 GC 触发方式比应有的更频繁。

然后开始实施我给你的链接中给出的所有技巧,你会发现一切都会运行得更加顺畅。我现在正在运行非常复杂且“不断更新”的 JTable,现在一切都很好:)

但是是的,除了最简单的情况和少量数据之外,默认的 JTable 实现真的非常糟糕。

【讨论】:

  • @WizardOfOdds,感谢您的链接。我发现跳过不可见单元格的概念非常聪明,将尝试在我的应用程序中实现这些技巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-10
  • 2014-11-14
相关资源
最近更新 更多