gpt4 book ai didi

java swing并发在JTextArea中循环显示文本

转载 作者:行者123 更新时间:2023-12-01 06:59:00 25 4
gpt4 key购买 nike

我需要执行/显示从 Arraylist 到 JTextArea 的一系列事件,但是,每个事件的执行时间不同。以下是代码,在循环中的第二个事件处失败:

   Thread worker = new Thread(new Runnable()
{
public void run()
{
while (eventList.size() > 0)
for (Event ev : eventList)
if(ev.ready())
{
/*try
{
Thread.sleep(1000);
} catch (InterruptedException e1)
{
e1.printStackTrace();
}*/
jTextArea.append(ev.toString() + "\n");
eventList.remove(ev);

}
}
});
worker.start();

最佳答案

我猜你遇到了ConcurrentModificationException。尝试使用迭代器,如下所示:

Iterator<Event> it = eventList.iterator();
while(it.hasNext())
{
Event ev = it.next();
if (ev.ready())
it.remove();
}
<小时/>

编辑为什么会抛出ConcurrentModificationException?

如果您循环访问集合,直接使用Iterator或使用for(E : list)并且您会修改集合,通过调用 addremove 或类似方法,您将得到此异常。这试图表明代码中存在问题。问题是,一段代码想要循环所有对象,而另一段代码则添加或删除对象。第一段代码遇到了麻烦,如果集合不断变化,它如何循环遍历所有内容?所以“他们”决定,当您循环遍历集合时,您不允许更改集合。 (除非您使用用于循环的迭代器更改它,就像此代码一样。it.remove()it 是循环迭代器,因此不会失败。)希望这是有道理的。

关于java swing并发在JTextArea中循环显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4454831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com