いくつかのデータを処理するGUIアプリケーションがあり、テキスト行をオブジェクトに変換します。作成される各オブジェクトは、JTextAreaのJTextPaneに表示されます。例:スイングコンポーネントinitを持たないスレッドからJTextArea(またはJTextPane)にデータをログする方法は?
ライン#1 827401830 ライン#2を作成したがしたがって、ユーザーがプロセスのお知らせです827401831
を作成しました。
シーンの背後には、バックグラウンドで実行されるスレッドがあり、すべての作業を行います。問題は、このスレッドのフィールドの1つにJTextAreaがあることです。したがって、上記のコードは正常に動作して仕事をしていませんが、時々私はないGUIからこのスレッドを使用していますし、私がいないためJTextAreaのをインスタンス化しています
public class ConsumerThread implements Runnable
{
private ArrayBlockingQueue<TicketExchangeLine> queue;
private JTextArea textArea;
public ExchConsumerThread(ArrayBlockingQueue<TicketExchangeLine> queue, JTextArea textArea)
{
this.queue = queue;
this.textArea = textArea;
}
public void run()
{
try
{
while (true)
{
// check if end of file from producer POV
if (queue.peek()!=null && ...)
break;
MyObject obj = queue.take();
try{
//do the process here
textArea.append("here comes the output for the user..."+obj.getID);
}catch(Exception nfe)
{
//Oops
}
}
textArea.append("\nDone!");
}catch (InterruptedException e)
{
// Oops
}catch(Exception exp)
{
exp.printStackTrace();
}
}
}
:それはこのようになります理由;さらに悪いことに、私はプロセスを見るためにすべてsystem.outする必要があります。
質問スレッド内のSwingコンポーネントを使用せずに、JTextArea(またはいつかJTextPane)にすべての '処理されたデータ'を記録するにはどうすればよいですか?
ありがとうございます!
'OutputStream'を使う代わりに、バイトの代わりに文字を扱う 'Writer'を使うことさえできます。 – Jeffrey