编程语言
首页 > 编程语言> > java-SwingWorker用于输出和工作,或者每个1个?

java-SwingWorker用于输出和工作,或者每个1个?

作者:互联网

当前,我总是创建一个SwingWorker来完成我的实际工作,并创建另一个来通过PipedReader处理输出.

我很想将两者结合起来,但是就我而言,我只是看不到一种简单的方法.

鉴于我:

>拥有可以正常工作的预制物体(在这种情况下为转换器)
>希望定期将转换器的进度更新显示到GUI
>当转换器完成其任务并返回时,接收一个对象.

没有两个SwingWorker,有没有办法做到这一点?

编辑:请注意,使转换器扩展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());
   }
}

解决方法:

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

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

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

标签:swingworker,swing,java,secondaryloop
来源: https://codeday.me/bug/20191201/2080793.html