我试图动态地添加/附加文本到JTextArea
。我试着这样做:使用Java动态添加文本到JTextArea
for(int i=0;i<10;i++){
jtextArea.append("i="+i);
//some processing code***********
}
其实所有i
值for
循环结束后追加到JTextArea中。但是我想将i
值添加到jtextAres中,因为for
循环正在进行。提前致谢。
我试图动态地添加/附加文本到JTextArea
。我试着这样做:使用Java动态添加文本到JTextArea
for(int i=0;i<10;i++){
jtextArea.append("i="+i);
//some processing code***********
}
其实所有i
值for
循环结束后追加到JTextArea中。但是我想将i
值添加到jtextAres中,因为for
循环正在进行。提前致谢。
我假设您在事件调度线程上执行此操作,您的处理代码将阻止此线程。因此,JTextArea
无法重新绘制。
您需要获取UI线程的处理代码。正常的建议是使用SwingWorker
,但在这种情况下,只需使用常规Thread
并使用SwingUtilities.invokeLater
在EDT上调度append
调用可能会更容易。
注意:我建议在JDK1.7的EDT上调用append
,该方法的javadoc不再声明它是线程安全的(1.6 javadoc仍然提到这一点)。但是看看this question显示,即使在1.6版本中,您可能也更安全地在美国东部时间将其称为更安全。
Concurrency in Swing教程是一个很好的阅读关于这个主题。
我不知道如果我理解你的问题很好,但尝试这样的代码:
for(int i = 0; i < 10; i++)
{
final int x = i;
SwingUtilities.invokeAndWait(new Runnable()
{
@Override
public void run()
{
jtextArea.append("i=" + x);
}
});
//some processing code***********
}
如果for循环的EDT进入(我怀疑,因为更新不可见)此次荣获”做一件事。当然,如果它不在EDT上,并且他正在使用Java 7,而且附加程序看起来不再是线程安全的,则这是一个非常好的建议。我们显然需要更多信息 – Robin