java - Swing更新滞后

标签 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 在更新 View 时似乎有点滞后,因此大多数时候(由于大量的重新绘制)表格行似乎在窗口周围出现故障。

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

最佳答案

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

有关此内容的更多信息,请参阅:Lesson: Concurrency in Swing

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

关于java - Swing更新滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39320924/

相关文章:

ios - 排队 CAAnimations 时出现故障

python - 为什么我在使用 wx.SplitterWindow 时会出现故障?

android - Spinner 图形错误 API 21

java - Spring MVC - 重定向后保留请求参数

java - 背包算法,大容量

java - 通过循环添加 JButton 会导致 ArrayIndexOutOfBoundsException

Java Swing : main class wait until JFrame is closed

java - ArrayList.add 方法不起作用

java - 如何在 XSLT 之后保留空 XML 标记 - 防止将它们从 <B></B> 折叠到 <B/>

java - JPanel 上的组件未以原始大小显示