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