编辑:我已编辑帖子来澄清我的问题,现在我自己,有更多的理解。System.out.println到JTextArea
正如标题所示,我在执行应用程序的任务时尝试在我的GUI中输出控制台到我的JTextArea
。
这是我目前在做什么:
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()
意志,因为它说的文档:
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中的所有其他事物之前。
是否有可能将一个事件基本注入到我的EventQueue中?或者有人可以指点我在这方面的一个体面的教程?
感谢,
_“上面在这个意义上的作品,我得到系统输出到我的JTextArea,但是当我试图做到这一点在的actionPerformed(),我没有得到任何输出解决方案” _和你确定你通过了所有这些如果是?没有很好的理由为什么一个'System.out'调用可以工作,另一个失败 – Robin