我正在设计一个程序,JEditorPane
用户可以在其中输入和编译 Java 代码。然后他们可以在新进程中运行他们的程序,然后他们的输出将显示在JTextArea
. 我通过扩展JTextArea
并将其添加为成员来实现这一点:
private OutputStream writer = new OutputStream() {
public void write(int b) {
Console.this.append(String.valueOf((char) b));
}
};
然后我有一个简单的getStream()
方法,它返回OutputStream
包装在 a 中的this PrintWriter
,System.setOut()
并System.setErr()
使用PrintWriter
.
现在问题来了:如果用户编译一个程序,其中大量输出一次发送到控制台(例如,无限循环的System.out.println()
调用),整个 GUI 挂起。我试图通过使用 aSwingWorker
来处理append()
呼叫来解决此问题,但似乎没有任何效果。
有没有办法让 GUI 保持响应,即使大量文本被写入JTextArea
? 我假设部分问题是append()
通话后更新 GUI 所花费的时间。有没有办法将写入延迟JTextArea
少量,以便用户可以单击按钮终止进程?