我尝试使用 Swing Worker 实时更新 jTable
行。我为此编写了一些代码片段。下面给出。我的问题是 jTable
仅更新一行。当我调试时,它会检索一行、两行或有时所有行。但是当我运行代码示例时,它会检索一行。任何人都可以帮助我解决这件事吗?
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
方法
关于java - 使用 SwingWorker 获取 jtable 的实时结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661981/