不为每个发布()调用SwingWorker进程()

时间:2018-04-16 08:28:49

标签: java swing awt swingworker swingx

我是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();

感谢。

1 个答案:

答案 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按照自己的意愿合并。