我想在动态更新的类中有一个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
}
}
答案 0 :(得分:3)
doSomething
中进行的密集处理阻止了EDT
,阻止了UI更新。请改用SwingWorker来执行此功能。
使用execute启动工作人员。将所有必需的来电移至console.write
或doInBackground或done。
答案 1 :(得分:0)
您可以尝试使用invokeAndWait()代替invokeLater(),但实际上没有足够的信息来确定答案。
我认为invokeLater()为“把它放在你要做的事情的队列中”,并将invokeAndWait()称为“把它放在要做的事情的队列中,我会在你做它们时暂停”。我不知道这个改变是否会解决你的问题,但根据你告诉我们的内容,似乎有些尝试。