Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    [Java] evitare una ConcurrentModificationException

    Ciao a tutti, se utilizzo la seguente classe:

    codice:
    public class Result extends ArrayList {
    	private Iterator i;
    	
    	public Result() {
    		super();
    		i = this.iterator();
    	}
    
    
     void addArrayResult(Value v[]) {
    		for(int i = 0; i < v.length; i++)
    		this.add((Value)v[i]);
    	}
     
    
     void addArrayResult(String v[]) {
    	for(int i = 0; i < v.length; i++)
    	this.add((String)v[i]);
    }
    	
    	
     void addResult(String r) {
    		this.add((String)r);
    	}
     
    
     void addResult(Value r) {
    	this.add((Value)r);
    }
    	
    	
    	public boolean hasNext() {
    		return i.hasNext();
    	}
    	
    	public String next() {
    		try {
    		return i.next().toString();
    		} catch(NoSuchElementException ex) {
    			return null;
    		}
    	}
    }
    Aggiungendo e iterando allo stesso tempo mi viene lanciata questa eccezione: ConcurrentModificationException

    La classe la uso così:

    codice:
    public class TestLoad {
    	public static void main(String[] args) {
    		try {
    		Result r = null;
                Result cR = null;
    		Connection c = Connection.connectTo("Test");
    		r = c.execQuery("getAllTabs");
    String str;
    		while(r.hasNext()) {
                      str = r.next();
    			System.out.println("Tabella " + str);
    			cR = c.execQuery("selectTab " + str + "\n" +
                      "getAllFields");
    while(cR.hasNext()) {
    				System.out.println(cR.next() + "\t");
    		}
    			}
    		c.close();
    		} catch(DBException e) {
    			e.printStackTrace();
    		}
    	}
    }
    Qualcuno saprebbe dirmi come permettere un comportamento simile senza che venga lanciata questa eccezione?

    grazie
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    risolto così:

    codice:
    import java.util.*;
    
    
    public class Result extends ArrayList {
    	private Iterator i = null;
          private boolean isFirst = true;
    	
    	public Result() {
    		super();
    	}
    
    
    public boolean add(Object o) {
      isFirst = true;
      return super.add(o);
    }
    
    
    
     void addArrayResult(Value v[]) {
    		for(int i = 0; i < v.length; i++)
    		this.add((Value)v[i]);
    	}
     
    
     void addArrayResult(String v[]) {
    	for(int i = 0; i < v.length; i++)
    	this.add((String)v[i]);
    }
    	
    
     void addResult(String r) {
    		this.add((String)r);
    	}
     
    
     void addResult(Value r) {
    	this.add((Value)r);
    }
    	
    
    	public boolean hasNext() {
    if(isFirst) {
    i = this.iterator();
    isFirst = false;
    }
    		return i.hasNext();
    	}
    	
    	public String next() {
    		try {
    		return i.next().toString();
    		} catch(NoSuchElementException ex) {
    			return null;
    		}
    	}

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.