编辑:我已经编辑了帖子以澄清我的问题,现在我自己有了更多的理解。
正如标题所说,我基本上是在尝试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);
}
}
以上将成功重定向System.out
到我上面的输出流,因此向我发送事件以EventQueue
更新我的 GUI ( 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 中?或者有人可以指点我这方面的一个不错的教程吗?
谢谢,