im string使用swing worker实时更新jTable
行。。我为此写了一些代码片段。下面给出。我的问题是jTable
只更新一行。当im调试时,它会检索一行、两行,有时甚至所有行。但当我运行代码样本时,它只检索一行。有人能帮我做这件事吗?
final DefaultTableModel dtm = (DefaultTableModel) jTable1.getModel();
removeAllRows(dtm);
SwingWorker<Void, Object[]> sw = new SwingWorker<Void, Object[]>() {
@Override
protected Void doInBackground() throws Exception {
Object[] array = null;
for (Map.Entry<String, ArrayList<LinkTester.Result>> entrySet : hashMap.entrySet()) {
boolean foo = true;
String url = entrySet.getKey();
ArrayList<LinkTester.Result> results = entrySet.getValue();
for (LinkTester.Result result : results) {
if (foo) {
foo = false;
publish(new Object[]{url, result.getTestlink(), result.getResponseCode(), result.getAnchortxt()});
} else {
publish(new Object[]{"", result.getTestlink(), result.getResponseCode(), result.getAnchortxt()});
}
}
}
return null;
}
@Override
protected void process(List<Object[]> chunks) {
Object[] a = chunks.get(chunks.size() - 1);
dtm.addRow(a);
}
};
sw.execute();
当您调用publish
时,值会被分段,也就是说,它们不会立即传递给process
,这是出于效率原因
相反,请尝试使用。。。
for (Object[] row : chunks) {
dtm.addRow(row)
}
在您的process
方法中,这样您就可以"处理"所有可用的条目
现在,如果您希望表更新得更快,可以在doInBackground
方法中放置一个Thread.sleep(1)
,这通常会允许process
方法被称为