2012-04-20 8 views
3

現在、私は実際に仕事をするには常にSwingWorkerを作成し、別のものはPipedReaderで出力を処理します。SwingWorkerは出力と作業の両方に対応していますか?

私は2つを組み合わせたいと思っていますが、私の状況では簡単な方法はありません。

  1. 受信日常GUIにconverterの進捗状況に関する最新情報を表示する(この場合には、converter)の作業を行い既製のオブジェクトを持っている:

    は私がいることを考えるとconverterがタスクを終了して戻るときのオブジェクト。

2 SwingWorkersせずにこれを行う方法はありますか?

編集:converterSwingWorkerを拡張することがオプションではないことに注意してください。

編集2:下記のコメントに対する回答。これは、大規模なチャンク(txt形式)を処理し、何が間違っているのか、あるいは何が決定されたのかをユーザに知らせる、より大きなGUIアプリケーションの一部です。

サンプルコード(使用されていない、純粋に説明):

//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()); 
    } 
} 
+0

は、なぜあなたはすべてでSwingWorkerのが必要なのでしょうか?これはUIに触れていますか? – ControlAltDel

+0

@ user1291492はいです。 30メガバイトのテキストファイルを処理し、ユーザーに何が決定されたかを見せさせる。 – Sheriff

答えて

1

を、現在のスレッドを停止することが可能ですSecondaryLoop複数のSwingWorkerインスタンスを連鎖させるのではなく、

SecondaryLoopは、基本的にあなたがSwingWorkerのに似EDTを、ブロックすることなく完了するために、バックグラウンドスレッド(または一連のスレッド)を待つことができます。どのような場合でもSwingWorkerの代わりには適していないかもしれませんが、あなたの問題の説明に基づいて、これはあなたが使用できるかもしれないものと思われます。

このトピックの詳細な議論については

は、一見関連する質問をしてください、「SecondaryLoop instead of SwingWorker?

+0

ありがとうございました!それは良い解決策のように見えます。私はそれを実装しようとします – Sheriff

2

ないあなたの質問への答え使用1または2 SwingWorkerあれば、私はこれらの事を複雑にしたい...

user1291492処理@ 30メガバイトのテキストファイル

  • を気にsn't Batchを実装するためには(Processing 30 mb text files)、たとえば10lごとにおっと、あなたがGUIにデータを公開し、その後、GUIへの出力がBatch中にimmediatelly

  • になりますが、JDK7を使用している場合は、使用して検討するかもしれないS wingWorker#cancel();

  • によって
関連する問題