gpt4 book ai didi

java - 使用 JTable 显示流数据时性能低下

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:29:16 25 4
gpt4 key购买 nike

我引用的代码是专有的,需要一个多播服务器,所以我不能发布 SSCCE 片段。我知道这可能会排除任何有用的见解,而这些见解会引起可行的回应...

我正在使用 Java 7 和 9 进行编译。

我目前在 GUI 应用程序中使用 JTable,它监听多播数据,并在数据到达时显示它。滚动表格或调整列大小时,应用程序的响应速度极慢。

我认为我的代码结构合理。

我使用了一个包装类,在它的 main() 函数中,它创建了一个自身的实例,该实例处理命令行参数、创建监听器、创建 JFrame 并调用返回 JTable 的类。这一切都在事件分派(dispatch)线程之外完成。

然后,在下一行中,我使用 invokeLater() 方法创建了一个线程来处理所有 GUI 渲染。它创建一个 JScrollPane,将 JTable 添加到滚动 Pane ,设置滚动条,设置视口(viewport),设置滚动模式,并将 JScrollPane 添加到 JFrame 。这一切都在事件分派(dispatch)线程中处理。

行通常填充得相当快,偶尔会出现屏幕卡住(一些行包含 30 行或更多行),但响应速度似乎可以接受。但是,当滚动或调整列大小时,响应非常慢。

我见过的所有示例,包括 SwingX SwingLabs 演示,都引用了预先加载的初始数据集。我需要一个将 JTable 与流数据结合使用的示例。

谁能指出这样的示例/演示?

这是我的 main() 片段...

public static void main(String args[]) 
{
final JXTrapTableGUI ttg = new JXTrapTableGUI(args);
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
ttg.createAndShowGUI();
}
});
}

附言。我要感谢每一位做出回应的人。直到 3 月 11 日我才离开这个项目,但我会在该日期审查所有回复。

最佳答案

我认为 JTable 根本无法很好地处理流数据。如果 TableModel 不包含真正的列表而是包含与数据流的某种连接,那么您提到的所有优化技术(例如让处理脱离事件调度线程)都是无关紧要的。

如果没有看到您尝试如何处理这个问题,就很难确切地知道为什么它很慢。但这里是我如何让它响应:创建一个存储列表的 ListModel - 不是对流的引用,只是一个普通列表。让另一个线程从流中捕获多播数据,我们称之为 DataStreamCollector。然后启动一个在计时器 (javax.swing.Timer) 上运行的线程,该计时器检查 DataStreamCollector 并根据需要更新 ListModel。

我这里的设计假设 UI 响应能力比与数据流 100% 同步更重要。调整计时器应该可以让您在拥有最新表格和响应式 UI 之间做出权衡。

关于java - 使用 JTable 显示流数据时性能低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987449/

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