Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    java.lang.RuntimeException - ciclare List

    Ciao ragazzi...ho un problema. Ho una List di oggetti che devo ciclare, estrarre uno alla volta e controllare delle dei parametri, se questi parametri mi soddisfano lascio intatta la lista, in caso contario elimino l'oggetto e continuo a ciclare la collezione controllando l'oggetto successivo.

    Il problema è che quando la condizione per la quale bisognerebbe eliminare l'oggetto dalla lista, l'oggetto viene rimosso ma al ciclo successivo mi viene "sputata" una bella eccezione.

    il codice è una cosa del tipo:

    Codice PHP:
    Iterator it=bonusTokenList.iterator();
                    while (
    it.hasNext())
                    {
                        
    BonusToken bt=(BonusToken)it.next();
                        if (
    bt.getBonusGotDate()==null) {
                            
    bonusTokenList.remove(bt);
                            break;
                        }
                    } 
    e l'eccezione che mi viene lanciata è una "java.lang.RuntimeException: net.mioProgetto.package.ReadOnlyException: Read only persistent object"

    che mi consigliate di fare?

  2. #2
    Utente di HTML.it L'avatar di nether
    Registrato dal
    Dec 2006
    Messaggi
    376
    Il problema è che quando la condizione per la quale bisognerebbe eliminare l'oggetto dalla lista, l'oggetto viene rimosso ma al ciclo successivo mi viene "sputata" una bella eccezione.
    non dovresti eliminare un oggetto presente nella collezione che stai iterando col metodo .remove() della collection, a meno che tu non esca immediatamente dopo dal ciclo (cosa che mi sembra tu faccia con "break"... invece non ho capito quando ricicli nuovamente la collezione). Usa il metodo .remove() di Iterator:
    codice:
    Iterator it=bonusTokenList.iterator();
                    while (it.hasNext())
                    {
                        BonusToken bt=(BonusToken)it.next();
                        if (bt.getBonusGotDate()==null) {
                            it.remove();
                            break;
                        }
                    }

  3. #3
    Grazie per la risposta,
    purtroppo col metodo remove () di iterator fa la stessa cosa (lancia sempre l'eccezione)...Il break era solo un tentativo, io devo cicleare l'intera collezione prima di uscire dal ciclo e proseguire il flusso del programma.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    L'errore te lo da anche senza iteratore? Se devi solo ciclare la list per rimuovere elementi puoi fare anche
    codice:
    for(int i=0; i<bonusTokenList.size(); i++) {
        BonusToken bt=(BonusToken)bonusTokenList.get(i);
        if (bt.getBonusGotDate()==null) {
           bonusTokenList.remove(i);
           //Decremento la variabile perche' l'indice degli elementi successivi scala di uno e devo ricontrollare anche l'indice attuale
           i--;
       }
    }

  5. #5
    ho scoperto ora che mi dava questo errore perchè la lista era un oggetto persistente (ho preso in mano codice scritto da altri e ho poca esperienza). In questi casi cercando un po' qua e un po' la la soluzione è creare un'altra lista e aggiungerci gli oggetti che mi interessano.

    Grazie a tutti...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: java.lang.RuntimeException - ciclare List

    Originariamente inviato da ramboelmeio
    [...]
    e l'eccezione che mi viene lanciata è una "java.lang.RuntimeException: net.mioProgetto.package.ReadOnlyException: Read only persistent object"
    Non vorrei dire, ma te lo diceva chiaro e tondo la JVM qual era il problema...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    hai ragione pure te :-( ma sono alle prima armi e soprattutto non ho mai usato un motore di persistenza!

    ciao grazie

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da ramboelmeio
    hai ragione pure te :-( ma sono alle prima armi e soprattutto non ho mai usato un motore di persistenza!

    ciao grazie
    Nemmeo io. Ma quell'eccezione parlava da sola.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    diciamo allora che anche se parlava da sola non sapevo come risolvere il problema!

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.