2010-02-19 3 views
-1

Comment réparer ce code? Je ne sais pas ce que cette erreur signifie ... J'ai entendu dire que ça vient d'avoir des éléments d'une liste retirée pendant un pour chaque boucle, mais je ne vois rien que je supprime ...Exception dans le fil "AWT-EventQueue-0" java.util

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

Le composant jcomponent contient une liste d'objets appelés couches auxquels il transfère des graphiques afin que les calques puissent se peindre eux-mêmes. Je n'enlève jamais les calques ou quoi que ce soit, alors je suis perdu. Aidez-moi?

+3

Il est généralement utile de publier la trace de pile. Comme vous allez acquérir plus d'expérience, vous apprendrez à les lire et à les apprécier pour leur immense valeur. –

+0

Vous avez vraiment besoin de poster la pile. À l'heure actuelle, nous n'avons même pas le nom et le message de l'exception avec laquelle travailler. – Thilo

Répondre

1

Si vous avez plus d'un thread qui pourrait fonctionner avec la liste des calques, vous devriez envisager d'utiliser un bloc synchroniser comme exemple ci-dessous. Cela aidera à éviter ce problème ou vous pourriez envisager de synchroniser layerList mais avec plus d'informations sur le programme et la structure des threads, il est difficile de vous dire ce qui est le mieux. Consultez this synchronized list en tant qu'option au lieu du bloc synchronisé.

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

Ceci est une réponse possible; vous accédez à layerList qui n'est pas thread-safe, donc en utilisant un java.util.Vector ou en utilisant synchronized résoudra le problème. – CharlesS

+0

@CharlesS envisager de quitter le vecteur si vous l'utilisez encore voir la question de savoir pourquoi [Vecteur est considéré comme obsolète] (http://stackoverflow.com/questions/1386275/why-is-java-vector-class-considered- obsolète ou obsolète). –

Questions connexes