JTextArea不动态更新

时间:2013-05-19 01:41:53

标签: java swing io jtextarea

我想在动态更新的类中有一个JTextArea。目前它只显示我在完成所有处理后附加到它的文本。我试图实现以下内容来解决它:

public NewConsole(){
     initComponents();
 }

public void write(final String s){
        SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                textarea.append(s);
             }
          });
    }

控制台在父类中实例化为:

protected NewConsole console = new NewConsole();

并输出到所有孩子的电话:

console.write("Append this..");

编辑:这里有更多信息:

public abstract class Parent{
     protected NewConsole console = new NewConsole();

     public Parent(){}

     protected abstract int doSomething();
}

public class Child extends Parent{

     public Child(){
          console.write("I want this to update dynamically");
          doSomething();
          console.write("And this..");
     }     

     public int doSomething(){
          //Quite intensive processing here
     }
}

2 个答案:

答案 0 :(得分:3)

doSomething中进行的密集处理阻止了EDT,阻止了UI更新。请改用SwingWorker来执行此功能。

使用execute启动工作人员。将所有必需的来电移至console.writedoInBackgrounddone

答案 1 :(得分:0)

您可以尝试使用invokeAndWait()代替invokeLater(),但实际上没有足够的信息来确定答案。

我认为invokeLater()为“把它放在你要做的事情的队列中”,并将invokeAndWait()称为“把它放在要做的事情的队列中,我会在你做它们时暂停”。我不知道这个改变是否会解决你的问题,但根据你告诉我们的内容,似乎有些尝试。