Swing更新滞后

时间:2016-09-04 19:55:41

标签: java swing visual-glitch

我有一个很小的应用程序,它可以非常快地找到“结果”(这种结果在这里并不重要,但有时候每秒超过10次)我希望以类似表格的形式向用户显示它们类似。我使用swing JTable(在JFrame中),将新结果作为新行插入,然后执行一个方法再次向下滚动。

    Object[] data = new Object[6];
    //fill data-array
    ((DefaultTableModel) resultTable.getModel()).addRow(data);
    resultTable.scrollRectToVisible(resultTable.getCellRect(resultTable.getRowCount(), 0, false));

这在某种程度上起了作用,但更新视图时Swing似乎有点滞后,因此大多数时候(由于大量的重绘)表行似乎在窗口周围出现故障。

您对如何防止这种情况发生了什么想法?喜欢与一些摆动内部油漆锁同步/使用不同的方法来显示结果?

1 个答案:

答案 0 :(得分:2)

没有相关的代码就不可能分辨出什么是错的,但我猜你正在处理需要花时间在Swing事件线程上的处理(请显示更多,所以我们不必猜测)。如果是这样,解决方案是使用SwingWorker允许您在后台线程上进行处理,同时仍然在Swing事件线程或EDT上更新Swing状态。例如,您可以在SwingWorker的doInBackground()方法中的循环内获取数据,然后使用publish / process将每行数据推送到JTable的模型中。

有关详情,请参阅:Lesson: Concurrency in Swing

如果您需要更具体的帮助,请考虑创建并发布Minimal, Complete, and Verifiable Example Program