Element aus ArrayListe löschen --> Thread hängt sich auf

System.exit(0)

Aktives Mitglied
Hallo,

ich habe folgendes Problem.

Ich habe ein Applet, das mehrere Threads hat.
In einem Thread werden die Geschosse verwaltet.

Applet <--- Thread_Geschoss 1 <-- x Geschoss

Die Geschosse sind in der Klasse Thread_Geschosse in einer ArrayList <Geschoss> myBullits gespeichert.

Nun möchte ich, wenn das Geschoss eine bestimmte Bedingung erfüllt, dieses Geschoss löschen, da ja jede weitere Berechnung sinnlos Resourcen verbrauchen würde.
Dazu wird die ArrayList in Thread_Geschosse durchsucht und das Element gelöscht. jedes Geschoss hat einen eineindeutigen Index --> myIndex.

Leider hängt sich das Progrramm an dieser Stelle fast - und eben nur fast immer - auf. Meistens beim ersten Löschvorgang, manchmal aber auch erst beim zweiten.

Ich habe das Ganze auch schon so kodiert, dass das repaint() nur durch den Thread_Geschosse ausgelöste wird, NACHDEM das entsprechende Geschoss gelöscht wird. Das hat auch nicht funktioniert.

Für Lösunsgshinweise wäre ich dankbar.

Gruß

System.exit(0)

-----
Hier die Fehelrmeldung:

Code:
Exception in thread "Thread-5" java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
        at java.util.AbstractList$Itr.next(AbstractList.java:343)
        at SPielVersuch.Thread_Geschoss.change_Pos(Thread_Geschoss.java:14)
        at SPielVersuch.Thread_Geschoss.run(Thread_Geschoss.java:37)
BUILD SUCCESSFUL (total time: 8 seconds)

Hier die wichtigsten Codes.

Java:
public class Thread_Geschoss extends Thread
{
    private ArrayList <Geschoss> myBullits;
    private double Intervall = 0.04;


    Thread_Geschoss ()
    {
        myBullits = new ArrayList <Geschoss> ();
    }

    public void change_Pos()
    {
        for (Geschoss G : myBullits)
        {
            G.compute(Intervall);
            if (G.get_Y() > 500)
            {
                for (int i = 0; i < myBullits.size(); i ++)
                {
                    if (G.get_myIndex() == myBullits.get(i).get_myIndex())
                    {
                        myBullits.remove(i);
                        break;
                    }
                }
            }
        }
    }

    public void run()
    {
        while (true)
        {
        try {
            Thread.sleep((long) (Intervall * 1000.0));
            change_Pos();
        } catch (InterruptedException ex) {
            Logger.getLogger(Thread_Ziele.class.getName()).log(Level.SEVERE, null, ex);
        }
        }

    }

    public void addBullit(Geschoss G)
    {
        myBullits.add(G);
    }

    public ArrayList <Geschoss> getBullits()
    {
        return myBullits;
    }

    public int Anz_Bullits()
    {
        return myBullits.size();
    }

}

Java:
public class Spielversuch extends JApplet
implements Runnable
{

    private ArrayList <Thread_Schrift> myThreads;
    private Thread_Geschoss myBullits;
    private ArrayList <Thread_Ziele> myTargets;
    private MyMouseHandler myMouse;

    private int x, y;
    public void init()
    {
        setup_Applet();
        
     //   myMouse = new MyMouseHandler(this) {};
     //   this.addMouseListener(myMouse);
        

        myThreads = new ArrayList <Thread_Schrift>();
        myThreads.add(new Thread_Schrift("",100,100,40));

        myBullits = new Thread_Geschoss();
        myBullits.addBullit(new Geschoss (100,100,0.5));
        System.out.println(myBullits.Anz_Bullits());

        myTargets = new ArrayList <Thread_Ziele>();
        myTargets.add(new Thread_Ziele(100,1000, 50, true));


        // TODO start asynchronous download of heavy resources
    }

    public void setup_Applet()
    {
        this.setSize(800,600);
        this.setBackground(Color.gray);

        this.addMouseMotionListener(new MouseMotionListener()
        {
            public void mouseMoved (MouseEvent e)
            {
                x = e.getX();
                y = e.getY();
            }

            public void mouseDragged(MouseEvent e) {
            }
        }   );

        this.addMouseListener(new MouseListener ()
        {
            public void mouseReleased(MouseEvent e)
            {
                myBullits.addBullit(new Geschoss(e.getX(), e.getY(), 0.5));
            }

            public void mouseClicked(MouseEvent e) {
 
            }

            public void mousePressed(MouseEvent e) {
            }

            public void mouseEntered(MouseEvent e) {
            }

            public void mouseExited(MouseEvent e) {
            }

        });
    }

    public void paint(Graphics G)
    {
        
        G.clearRect(0,0,getWidth(),getHeight());
        G.drawString( x + " " + y,20,20);

      
        G.setColor(Color.red);

        if (myBullits.Anz_Bullits() > 0)
        {
            for (Geschoss GS : myBullits.getBullits())
            {
            G.drawOval(GS.get_X(), GS.get_Y(),
                    GS.get_D(), GS.get_D());
            }

            for (Thread_Ziele TG : myTargets)
            {
                G.fillRect(TG.get_X(), TG.get_Y(), TG.get_Breite() ,TG.get_Breite() / 2);
            }
        }
    }


    public void start()
    {
       
        for (Thread_Schrift TS : myThreads)
        {
            TS.start();
        }


        myBullits.start();

        for (Thread_Ziele TG : myTargets)
        {
            TG.start();
        }
            Thread thisThread = new Thread(this, "Test");
            thisThread.start();



    }

    public void run()
    {

        while (true)
        {
            
            try {
                Thread.sleep(25);
            } catch (InterruptedException ex) {
                Logger.getLogger(Spielversuch.class.getName()).log(Level.SEVERE, null, ex);
            }
            repaint();
        }
    }


}
 

Marco13

Top Contributor
Man darf eine Collection (ArrayList) nicht verändern, während man drüberiteriert. Man könnte das ELement mit einem Iterator entfernen, oder geschickt rum-synchonisieren, oder oder oder... oder die zu löschenden Elemente in einer neuen List speichern, und am Ende alle auf einmal entfernen (wenn das hinhaut)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Queue.remove() -> no such element exception Allgemeine Java-Themen 17
8u3631984 Prüfen ob min. ein Element eines Sets in einem anderen Set enh Allgemeine Java-Themen 4
B flying-saucer-pdf Element vertikal strecken Allgemeine Java-Themen 0
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
S Link element an vorletzte stelle einfügen Allgemeine Java-Themen 2
I DOM-Parser - Element im Element an bestimmten Stellen auslesen Allgemeine Java-Themen 1
B DomParser - Element filtern Allgemeine Java-Themen 4
S Iterable<?> anzahl der Element Allgemeine Java-Themen 14
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
C Swing File[] als klickbare links in irgendeinem Swing Element Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
KeVoZ_ JSoup - Website Inhalt/Element mit String vergleichen Allgemeine Java-Themen 2
B Prüfen, ob ein Element in der Liste nicht existiert Allgemeine Java-Themen 3
Messoras List zeigt nur das letzte Element an Allgemeine Java-Themen 14
O aus Liste ein beliebiges Element auswählen Allgemeine Java-Themen 7
G mittleres Element aus TreeMap Allgemeine Java-Themen 5
J XML Element Zugriff Allgemeine Java-Themen 4
S translate verschiebt verkehrtes Element Allgemeine Java-Themen 2
M Webservices: WSDL Files ohne "Service" Element? Allgemeine Java-Themen 4
P Element toString Allgemeine Java-Themen 9
J Element aus HashSet löschen Allgemeine Java-Themen 2
E Blob Element kopieren Allgemeine Java-Themen 12
G Element aus Liste entfernen Allgemeine Java-Themen 6
B von Array-Element auf Position in Array Allgemeine Java-Themen 7
M Javadoc | Javadoc Eintrag des verlinkten Element einbetten? Allgemeine Java-Themen 4
A Element für Preferences Page Allgemeine Java-Themen 3
T Element aus Vector entfernen Allgemeine Java-Themen 4
J Tree indexieren, Element-Indexierung Allgemeine Java-Themen 2
A Queue, beim dem das letzte Element herausfällt Allgemeine Java-Themen 4
I ArrayList mit einem aktiven Element Allgemeine Java-Themen 7
M Wie heißt denn dieses grafische Element ? Allgemeine Java-Themen 2
K Kein schließendes Tag bei leerem Element mit JDOM Allgemeine Java-Themen 8
E JTree - einzelnes Element (Knoten) editieren Allgemeine Java-Themen 2
B JList Element Auswahl Allgemeine Java-Themen 2
N Array Element vom Typ eines Objekts zeigt auf ein anderes A. Allgemeine Java-Themen 4
Ark Kubische Suche um ein Element in array[][][] Allgemeine Java-Themen 18
D Fehler beim löschen eines Arraylist-element Allgemeine Java-Themen 5
M Erstes Element einer Enumeration ermitteln Allgemeine Java-Themen 6
N Element aus LinkedList löschen Allgemeine Java-Themen 2
C Collection Element ersetzen Allgemeine Java-Themen 5
N Arrayliste in eine Datei speichern Allgemeine Java-Themen 4
H ArrayListe in CSV Datei speichern Allgemeine Java-Themen 6
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Y ArrayListe eingegebenen index entfernen Allgemeine Java-Themen 1
kodela Arrayliste mit Arrayliste realisieren Allgemeine Java-Themen 14
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
M ArrayListe & Mac Allgemeine Java-Themen 1
S Erste Schritte Arrayliste alphabetisch sortieren mit Eingabe Allgemeine Java-Themen 9
T ObjectInputStream - Arrayliste, die unbekannte Objekte enthält Allgemeine Java-Themen 9
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
R Leere Verzeichnisse löschen Allgemeine Java-Themen 11
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
R Löschen von Files nicht möglich Allgemeine Java-Themen 11
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben