首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java GUI线程- SwingWorker

Java GUI线程- SwingWorker
EN

Stack Overflow用户
提问于 2010-07-02 00:01:10
回答 2查看 2.2K关注 0票数 1

我有一个关于SwingWorker和Java GUI的问题。

我有几个处理信息的类,我们可以称它们为Foo1Foo2Foo3。这一过程可能需要很长时间。

这些都是Foo的子类,但是Foo本身并不直接调用( Foo[x]类使用从Foo继承的方法。为了让EDT自由地绘制进度条,在保持对象层次结构的同时使用SwingWorker的最好方法是什么?有没有可能有像Foo1Worker extends SwingWorker这样的包装类,并让它的doInBackground()调用Foo1.myProcessMethod()?即使Foo1没有扩展SwingWorker,它仍然可以像我期望的那样工作吗?

编辑:为了澄清我的问题,即使它们已经是子类,我如何才能使Foo[x] SwingWorkers?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-02 03:04:24

我认为答案取决于由Foo子类管理的数据类型。如果结果是同构的,只需扩展SwingWorker并相应地实例化具体的子类:

代码语言:javascript
复制
class Whatever {}

abstract class AbstractFoo extends SwingWorker<List<Whatever>, Whatever> {}

class Foo1 extends AbstractFoo {

    @Override
    protected List<Whatever> doInBackground() throws Exception {
        ...
    }
}

如果每个子类管理不同的类型,则使父类成为泛型,并使用所需的类型实例化每个具体的子类:

代码语言:javascript
复制
class Whatever {}
class Whichever {}

abstract class GenericAbstractFoo<T, V> extends SwingWorker<T, V> {}

class Foo2 extends GenericAbstractFoo<List<Whatever>, Whatever> {

    @Override
    protected List<Whatever> doInBackground() throws Exception {
        ...
    }
}

class Foo3 extends GenericAbstractFoo<List<Whichever>, Whichever> {

    @Override
    protected List<Whichever> doInBackground() throws Exception {
        ...
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-07-02 00:21:18

如果你需要更新图形用户界面元素,比如调用像SetText()这样的例程,你需要一个SwingWorker。我从来没有考虑过将它们用于非图形用户界面更新任务;我总是对Thread或实现的Runnable进行子类化。我建议你在你的Foo类中尝试这样做,看看这个问题是否会自行解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3159547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档