1

我正在尝试将文本添加/附加到JTextArea动态。我试着做:

for(int i=0;i<10;i++){
    jtextArea.append("i="+i);
    //some processing code***********
}

实际上,循环i完成后所有值都附加到 jtextarea for。但是随着循环的进行,我想为ijtextAres 添加价值。for提前致谢。

4

2 回答 2

3

我假设您在Event Dispatch Thread上执行此操作,并且您的处理代码将阻塞该线程。结果,JTextArea无法重新粉刷。

您需要获取 UI 线程的处理代码。通常的建议是使用 a ,但在这种情况下,使用常规和使用来安排EDT 上的呼叫SwingWorker可能更容易。ThreadSwingUtilities.invokeLaterappend

注意:我建议append从 JDK1.7 开始调用 EDT,该方法的 javadoc 不再声明它是线程安全的(1.6 javadoc 仍然提到这一点)。但是看这个问题表明,即使在 1.6 中,在 EDT 上调用它也可能更安全。

Swing中的并发教程是关于这个主题的好读物。

于 2012-05-01T06:24:35.717 回答
3

我不确定我是否理解你的问题,但试试这个代码:

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***********
}
于 2012-05-01T06:26:19.450 回答