用于输出和输出的SwingWorker工作,还是每个?

时间:2012-04-20 16:02:35

标签: java swing swingworker secondaryloop

目前,我始终创建SwingWorker来完成我的实际工作,而另一个则通过PipedReader创建输出。

我喜欢将两者结合起来,但在我的情况下,我只是看不到一种简单的方法。

鉴于我:

  1. 预制对象可以正常工作(在这种情况下为converter
  2. 希望定期显示converter到GUI的进度的更新
  3. converter完成任务并返回时收到一个对象。
  4. 如果没有两个SwingWorkers,有没有办法做到这一点?

    修改:请注意,converter扩展SwingWorker不是一种选择。

    编辑2:回应下面的评论。这是一个更大的GUI应用程序的一部分,处理大块数据(以txt的形式)并告知用户什么是错的,或者已经决定了什么。

    示例代码(纯粹是说明性的,未使用):

    //SwingWorker 1
    @Override
    protected Void doInBackground() {
    
       outputWorker.useInStream(new PipedReader(outStream));
       outputWorker.execute();
       converter.usePipedWriter(outStream);
       Output object2=converter.Convert(object1);
    
    }
    
    //SwingWorker 2
    @Override
    protected Void doInBackground() {
    
       while(inStream.hasNext()) {
          publish(inStream.next());
       }
    }
    

2 个答案:

答案 0 :(得分:2)

如果使用一个或两个SwingWorker

不是您问题的答案,我想让这些事情变得复杂......

  

@ user1291492处理30 MB文本文件

答案 1 :(得分:1)

如果您使用的是JDK7,则可以考虑使用SecondaryLoop而不是将多个SwingWorker实例链接在一起。

SecondaryLoop本质上允许您等待后台线程(或一系列线程)完成而不会阻止EDT,类似于SwingWorker。在每种情况下,它可能不适合作为SwingWorker的替代品,但是根据您对问题的描述,听起来这可能是您可以使用的。

有关此主题的更多讨论,请查看相关问题“SecondaryLoop instead of SwingWorker?