1

SwingWorker と Java GUI について質問があります。

Foo1情報を処理するいくつかのクラスがあり、それらを 、Foo2、および と呼ぶことができますFoo3。この処理には非常に長い時間がかかる場合があります。

これらはすべて のサブクラスですがFooFooそれ自体は直接呼び出されません (Foo[x]クラスは から継承されたメソッドを使用しますFoo。EDT がプログレス バーを自由にペイントできるようにするために、オブジェクト階層を維持するときに使用する最善の方法は何SwingWorkerですか?などのラッパークラスがFoo1Worker extends SwingWorkerあり、そのdoInBackground()呼び出しがありますFoo1.myProcessMethod()か?Foo1拡張されていませんがSwingWorker、これは期待どおりに機能しますか?

Foo[x]編集: 私の質問を明確にするために、既にサブクラスであっても SwingWorkersを作成するにはどうすればよいですか?

4

2 に答える 2

2

その答えは、Fooサブクラスによって管理されるデータのタイプに大きく依存すると思います。SwingWorker結果が同種の場合は、それに応じて具象サブクラスを拡張してインスタンス化するだけです。

class Whatever {}

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

class Foo1 extends AbstractFoo {

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

それぞれが異なる型を管理する場合は、親をジェネリックにし、各具象サブクラスを必要な型でインスタンス化します。

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 {
        ...
    }
}
于 2010-07-01T19:04:23.617 に答える
0

などのルーチンの呼び出しなど、GUI 要素を更新する必要がある場合は、SwingWorker が必要ですSetText()。GUI 以外の更新タスクに使用することを考えたことはありません。私は常に をサブクラス化Threadまたは実装してきましRunnableた。Foo クラスでこれを試して、問題が解決するかどうかを確認することをお勧めします。

于 2010-07-01T16:21:17.730 に答える