編集:私は自分の質問を明確にするために投稿を編集しましたが、今では私自身、より理解が深まっています。
私は基本的に、タイトルが示すようにJTextArea
、アプリケーションのタスクを実行しながら、GUIでコンソールを出力しようとしています。
これが私が現在行っていることです:
public class TextAreaOutputStream extends OutputStream
{
private final JTextArea textArea;
private final StringBuilder sb = new StringBuilder();
public TextAreaOutputStream(final JTextArea textArea)
{
this.textArea = textArea;
}
@Override
public void flush()
{
}
@Override
public void close()
{
}
@Override
public void write(int b) throws IOException
{
if (b == '\r')
return;
if (b == '\n')
{
final String text = sb.toString() + "\n";
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
textArea.append(text);
}
});
sb.setLength(0);
}
sb.append((char) b);
}
}
上記は、上記の出力ストリームに正常にリダイレクトされるため、GUIを更新するためにSystem.out
イベントをにディスパッチします( )。EventQueue
JTextArea
ここに問題があります:
現在invokeLater()
、ドキュメントに記載されているようにwillを使用しています。
Causes runnable to have its run method called in the dispatch thread of the EventQueue. This will happen after all pending events are processed.
したがって、実際に実行したいのはrun()
、EventQueue内の他のすべてを処理する前に、GUIの更新(呼び出し)を実行することです。
基本的にイベントをEventQueueに挿入することは可能ですか?または、誰かが私にこの分野のまともなチュートリアルを教えてもらえますか?
ありがとう、