我正在设计一个程序,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少量,以便用户可以单击按钮终止进程?