Java 输出和输出的SwingWorker;工作,还是每人一个?
目前,我总是创建一个Java 输出和输出的SwingWorker;工作,还是每人一个?,java,swing,swingworker,secondaryloop,Java,Swing,Swingworker,Secondaryloop,目前,我总是创建一个SwingWorker来完成我的实际工作,另一个通过PipedReader处理输出 我很想把两者结合起来,但在我的情况下,我看不到一个简单的方法 鉴于我: 有一个可以工作的预制对象(converter,在本例中) 要定期向GUI显示转换器的进度更新吗 当converter完成任务并返回时接收对象 有没有一种方法可以做到这一点,而不需要两个骗子 编辑:请注意,制作converterextendSwingWorker不是一个选项 编辑2:回应下面的评论。这是一个更大的GUI应用程
SwingWorker
来完成我的实际工作,另一个通过PipedReader
处理输出
我很想把两者结合起来,但在我的情况下,我看不到一个简单的方法
鉴于我:
converter
,在本例中)converter
完成任务并返回时接收对象converter
extendSwingWorker
不是一个选项
编辑2:回应下面的评论。这是一个更大的GUI应用程序的一部分,处理大块数据(以txt的形式),并通知用户哪里出了问题,或者已经决定了什么
示例代码(仅用于说明,未使用):
如果使用一个或两个
SwingWorker
,我想让这些事情复杂化,这并不是对你问题的回答
- 我建议看一下和真实的相同的代码
不关心Executor
生命周期,反之亦然SwingWorkers
- 你必须,特别是阅读
- 您必须(
)来实现一些处理30 mb文本文件
,例如,每10个循环将数据发布到GUI,然后将立即输出到GUI批处理
- 在批处理期间,可以通过S
wingWorker#cancel()停止当前线程代码>
如果您使用JDK7,您可以考虑使用链接来代替多个SWIFGER实例。 SecondaryLoop本质上允许您等待后台线程(或一系列线程)完成而不阻塞EDT,类似于SwingWorker。在任何情况下,它可能都不适合作为SwingWorker的替代品,但是根据对您问题的描述,听起来这是您可以使用的
有关此主题的更多讨论,请查看相关问题“为什么您需要一个swingWorker?这会影响用户界面吗?@user1291492是的。处理30MB的文本文件,让用户看到所做的决定。谢谢!这看起来是一个很好的解决方案。我将尝试实施它
//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());
}
}