2010-02-19 32 views
-1

如何修复此代码?我不知道这个错误意味着什么...我听说它来自每个循环中删除列表中的元素,但我没有看到任何东西我正在删除...线程“AWT-EventQueue-0”中的异常java.util

public void paintComponent(Graphics g) 
    { 
     Graphics2D g2 = (Graphics2D) g; 
     for(Layer e : layerList) 
      e.drawLayer(g2); 
    } 

jcomponent具有一个名为图层的对象列表,它将图形传递给图层以便图层自己绘制。我从不删除任何层或任何东西,所以我迷路了。帮帮我?

+3

它通常有助于发布堆栈跟踪。当你想获得更多的经验时,你会学会阅读这些经历,并感谢他们的巨大价值。 – 2010-02-19 05:08:58

+0

你确实需要发布堆栈跟踪。现在,我们甚至没有例外的名称和消息。 – Thilo 2010-02-19 05:51:23

回答

1

如果您有多个可以与图层列表一起工作的线程,则应考虑使用下面的示例中的同步块。这将有助于防止此问题,或者您可以考虑让layerList同步化,但无法了解程序和线程结构的更多信息,因此很难告诉您什么是最好的。作为选项而不是同步块检出this synchronized list

synchronized(layerList) 
{ 
    for(Layer e : layerList) 
     e.drawLayer(g2); 
} 
+0

这是一个可能的答案;您正在访问不是线程安全的layerList,因此使用java.util.Vector或使用synchronized将解决此问题。 – CharlesS 2012-08-03 10:31:04

+0

@CharlesS考虑如果你仍然在使用它,请关闭Vector,看看这个问题,为什么[Vector已被视为已过时](http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered-过时的或 - 弃用)。 – 2012-08-03 15:09:14