我是Swings的新手。
我在txt文件中有近200万条记录,需要逐个读取进程(基于拆分列)并将它们推送到Table。完成整个过程需要大约4-5秒。
我面临的问题:JTable / UI正在等待所有200万条记录被处理,然后一起显示。 是否有任何选项可以将记录推送到基于批处理的OR并行推送的JTable UI,就像我处理500条记录一样,我可以将它们推送到UI?
尝试使用SwingWorker实现,为每500条记录调用push()方法,但是process()只调用一次,而不是每500条。请纠正我的方法是否错误。
new SwingWorker<Boolean, java.util.List<String>>() {
@Override
protected Boolean doInBackground() throws Exception {
// Example Loop
int i = 1;
String line;
java.util.List<String> list = new LinkedList();
while ((line = in.readLine()) != null) {
line = line.trim().replaceAll(" +", " ");
list.add(line);
if (i % 500 == 0) {
publish(list);
list = new LinkedList();
}
i++;
}
return true;
}
@Override
protected void process(java.util.List<java.util.List<String>> chunks) {
dtm.addRow(new String[]{"data"});
System.out.println("Found even number: " + chunks.size());
}
}.execute();
感谢。
答案 0 :(得分:0)
正如文档所说,Swing可以将对publish
的多个来电与process
的一次通话相关联:
发布强>
因为在Event上异步调用了process方法 Dispatch Thread可能会发生多次调用 在执行过程方法之前。 出于性能目的 这些调用合并为一个带有连接的调用 参数即可。 例如:
publish("1"); publish("2", "3"); publish("4", "5", "6");
威力 结果是:
process("1", "2", "3", "4", "5", "6")
没有必要发布每500次迭代,只要有一个结果就可以发布,并让Swing按照自己的意愿合并。