我有一个很小的应用程序,它可以非常快地找到“结果”(这种结果在这里并不重要,但有时候每秒超过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似乎有点滞后,因此大多数时候(由于大量的重绘)表行似乎在窗口周围出现故障。
您对如何防止这种情况发生了什么想法?喜欢与一些摆动内部油漆锁同步/使用不同的方法来显示结果?
答案 0 :(得分:2)
没有相关的代码就不可能分辨出什么是错的,但我猜你正在处理需要花时间在Swing事件线程上的处理(请显示更多,所以我们不必猜测)。如果是这样,解决方案是使用SwingWorker允许您在后台线程上进行处理,同时仍然在Swing事件线程或EDT上更新Swing状态。例如,您可以在SwingWorker的doInBackground()
方法中的循环内获取数据,然后使用publish / process将每行数据推送到JTable的模型中。
有关详情,请参阅:Lesson: Concurrency in Swing
如果您需要更具体的帮助,请考虑创建并发布Minimal, Complete, and Verifiable Example Program。