ConcurrentModificationException

Status
Niet open voor verdere reacties.

EdjeCageman

Gebruiker
Lid geworden
24 okt 2011
Berichten
273
Ik heb een bestand dat uitgelezen moet worden dmv:

Code:
	public void readBehandelingData() {

		//read Behandelingen methode.
		try	{
			ObjectInputStream read  =
					new ObjectInputStream ( new FileInputStream( pad + "BehandelingGegevens.dat" ));
			behandeling = (Behandelingsbeheer) read.readObject();
		}	catch(ClassNotFoundException e)	{
			System.out.println("Onbekende Klasse");
		}	catch(IOException e)	{

			System.out.println("Fout bij inlezen van het bestand: " + pad + "BehandelingGegevens");
			e.printStackTrace();

		} 
	}

En deze wordt bij het opstarten ingeladen dmv:
Code:
 IOBestand fileIOObject = new IOBestand();
		  //lees het bestand van de behandelingen van A3 uit.
		  fileIOObject.readBehandelingData();
		  Behandelingsbeheer_om nieuw = new Behandelingsbeheer_om();
		  nieuw.voegsamen();
		  for(int i = 0; i < fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().size(); i++)
		  {
			  	String polisnummer = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getPolisnummer(); 
				String omschrijving = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getOmschrijving(); 
				String status = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getStatus(); 
				String startdatum = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getStartdatum(); 
				String einddatum = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getEinddatum();
				String beginuur = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getbeginUur();
				String einduur = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getEindUur();
				String fysiotherapeut = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getFysiotherapeut();
				//String prijs = fileIOObject.getBehandelingen().readBehandelingLijst().getBehandeling().get(i).getPrijs();
				double prijs = 1;
				System.out.println(polisnummer + " " + omschrijving + " " + status + " " + startdatum + " " + einddatum + " " + beginuur+ " " + einduur+ " " + fysiotherapeut + " " + prijs);
				nieuw.vulBehandelingLijst(polisnummer, omschrijving, status, startdatum, einddatum, beginuur, einduur, prijs, fysiotherapeut, false);
				//nieuw.vergelijk(polisnummer, omschrijving, status, startdatum, einddatum, beginuur, einduur, fysiotherapeut, prijs);
		  }
		  System.out.println(nieuw.readBehandelingLijst());
		  nieuw.wegschrijven();
	}


Zoals je ziet wil ik dus gegevens uit het ene bestand halen, en deze van een andere behandelingsbestand omzetten. Hierbij moet er worden gelet of de behandeling wel/niet bestaat in het andere bestand. Als hij nog niet bestaat moet hij worden toegevoegd, als hij al wel bestaat dan moet er gewoon niks gebeuren dmv de code:

Code:
	public void vergelijk(String polisnummer, String omschrijving, String status, String startdatum, String einddatum, String beginuur, String einduur, String fysiotherapeut, double prijs)
	{
		System.out.println("laten we beginnen");
		for(Behandeling_om behandeling : readBehandelingLijst())
		{
			System.out.println(polisnummer + ", " + omschrijving+ ", " +status+ ", " +startdatum+ ", " +einddatum+ ", " +beginuur+ ", " +einduur+ ", " +fysiotherapeut+ ", " +prijs);
			System.out.println(behandeling.getPolisnummer() + ", " + behandeling.getOmschrijving()+ ", " +behandeling.getStatus()+ ", " +behandeling.getStartdatum()+ ", " +behandeling.getEinddatum()+ ", " +behandeling.getbeginUur()+ ", " +behandeling.getEindUur()+ ", " +behandeling.getFysiotherapeut());
			if(polisnummer.equals(behandeling.getPolisnummer()) && omschrijving.equals(behandeling.getOmschrijving()) && status.equals(behandeling.getStatus()) && startdatum.equals(behandeling.getStartdatum()) && einddatum.equals(behandeling.getEinddatum()) && beginuur.equals(behandeling.getbeginUur()) && einduur.equals(behandeling.getEindUur()) && fysiotherapeut.equals(behandeling.getFysiotherapeut()))
			{
				System.out.println("gelijk");
				break;
			}
			else
			{
				vulBehandelingLijst(polisnummer, omschrijving, status, startdatum, einddatum, beginuur, einduur, prijs, fysiotherapeut, false);
				System.out.println("ongelijk");
			}
	}

Maar dit weigert hij ik blijf een fout krijgen van:
Code:
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
	at java.util.AbstractList$Itr.next(Unknown Source)
	at Control.Behandelingsbeheer_om.vergelijk(Behandelingsbeheer_om.java:218)
	at Boundary.Inlogpaneel.main(Inlogpaneel.java:132)

Ik zie gewoon niet meer wat er fout gaat en waar. Nou ja de waar is: als hij op de regel komt bij het vergelijken en hij ze in de arraylist wilt stoppen, daar gaat het mis...
 
Laatst bewerkt:
Aah, ik heb nu de fout gevonden, ik wil de lijst aanpassen terwijl de lijst wordt doorlopen, maar dat mag niet. Ik heb nu een nieuw object aangemaakt volgens de volgende code:

Code:
public void vergelijk(String polisnummer, String omschrijving, String status, String startdatum, String einddatum, String beginuur, String einduur, String fysiotherapeut, double prijs)
	{
		System.out.println("laten we beginnen");
		voegsamen();
		Behandelingenlijst_om lijst2 = new Behandelingenlijst_om();
		lijst2.getBehandeling().addAll(IOBestand.behandelingopvragen());
		for(Behandeling_om behandeling : readBehandelingLijst())
		{
			System.out.println(polisnummer + ", " + omschrijving+ ", " +status+ ", " +startdatum+ ", " +einddatum+ ", " +beginuur+ ", " +einduur+ ", " fysiotherapeut+ ", " +prijs);
			System.out.println(behandeling.getPolisnummer() + ", " + behandeling.getOmschrijving()+ ", " +behandeling.getStatus()+ ", " +behandeling.getStartdatum()+ ", " +behandeling.getEinddatum()+ ", " +behandeling.getbeginUur()+ ", " +behandeling.getEindUur()+ ", " +behandeling.getFysiotherapeut());
			
			if(polisnummer.equals(behandeling.getPolisnummer()) && omschrijving.equals(behandeling.getOmschrijving()) && status.equals(behandeling.getStatus()) && startdatum.equals(behandeling.getStartdatum()) && einddatum.equals(behandeling.getEinddatum()) && beginuur.equals(behandeling.getbeginUur()) && einduur.equals(behandeling.getEindUur()) && fysiotherapeut.equals(behandeling.getFysiotherapeut()))
			{
				System.out.println("gelijk");
				break;
			}
			else
			{
				lijst2.addBehandeling(new Behandeling_om(polisnummer, omschrijving, status, startdatum, einddatum, beginuur, einduur, prijs ,fysiotherapeut, false));
				System.out.println(lijst2.getBehandeling());
			}
		}
		IOBestand.behandlingwegschrijven(lijst2.getBehandeling());
	}

Maar nu ziet mijn systeem niet wanneer een behandeling gelijk is:confused: Ziet er iemand iets dat ik fout doe?
 
Laatst bewerkt:
Oké dom, natuurlijk hij voegt zolang een behandeling toe totdat het systeem eindelijk een behandeling tegenkomt die gelijk is...

Wordt gek hiervan, en sorry dat ik het moet vragen (heel basic I know) maar hoe doe ik ook alweer ervoor zorgen dat er een statement pas wordt uitgevoerd wanneer de gehele arraylist is doorgelopen en het systeem niks is tegengekomen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan