加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用JTable显示流数据的缓慢性能

发布时间:2020-12-15 04:07:42 所属栏目:Java 来源:网络整理
导读:我引用的代码是专有的,需要多播服务器,因此我无法发布SSCCE代码段.我理解这可能会排除任何有用的洞察力,从而引发可行的反应…… 我正在使用Java 7 u 9进行编译. 我目前正在GUI应用程序中使用JTable来监听多播数据,并在它到达时显示它.滚动表格或调整列大小时
我引用的代码是专有的,需要多播服务器,因此我无法发布SSCCE代码段.我理解这可能会排除任何有用的洞察力,从而引发可行的反应……

我正在使用Java 7 u 9进行编译.

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

我以为我正确地构建了我的代码.

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

然后,在下一行中,我使用invokeLater()方法创建一个处理所有GUI呈现的线程.它创建一个JScrollPane,将JTable添加到滚动窗格,设置滚动条,设置视口,设置滚动模式,以及将JScrollPane添加到JFrame.这都是在事件派发线程中处理的.

这些行通常填充得相当快,偶尔屏幕冻结(某些行包含30行或更多行),但响应性似乎可以接受.但是,在滚动或调整列大小时,响应非常慢.

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

谁能指点我这样的例子/演示?

这是我的主要()片段……

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

PS.我要感谢每一位回复的人.我已被推迟到3月11日这个项目,但我将审查该日期的所有回复.

解决方法

我认为JTable根本不适用于流数据.如果TableModel不包含实际列表而是与数据流的某些连接,那么您提到的所有优化技术(如保持处理的事件调度线程)都是不相关的.

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

我的设计假设UI响应比100%与数据流同步更重要.调整计时器应该让您在拥有响应式UI的最新表格中进行权衡.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读