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

    NullPointerException su un ArrayList anche se ho inizializzato

    Salve ragazzi, devo fare un progetto per un esame e ho un problema che non riesco proprio a capire il perché. Posto tutto e vi spiego:

    Costruttore:


    codice:
        public User(String nome, String username, String password, double saldo, ArrayList<Utilizzabile> cronologia){
            this.nome = nome;
            this.username = username;
            this.password = password;
            this.saldo = saldo;
            this.cronologia = cronologia;
            carrello = new ArrayList<>();
        }
    
    Metodo interessato:
    
        public double aggiungiAlCarrello(int ID){
            double totale = 0;
            for(int i=0; i<Admin.catalogo.size(); i++){
                
                if(Admin.catalogo.get(i) instanceof Viaggi){
                    Viaggi x = (Viaggi) Admin.catalogo.get(i);
                    if(x.getID() == ID){
                        carrello.add(x);
                        totale = totale+x.getPrezzo();
                    }
                }
                
                else if(Admin.catalogo.get(i) instanceof Ristoranti){
                    Ristoranti x = (Ristoranti) Admin.catalogo.get(i);
                    if(x.getID() == ID){
                        carrello.add(x);
                        totale = totale+x.getPrezzo();
                    }
                }
                
                else if(Admin.catalogo.get(i) instanceof Beni){
                    Beni x = (Beni) Admin.catalogo.get(i);
                    if(x.getID() == ID){
                        carrello.add(x);
                        totale = totale+x.getPrezzo();
                    }
                }
                
                else if(Admin.catalogo.get(i) instanceof PrestazioneOpera){
                    PrestazioneOpera x = (PrestazioneOpera) Admin.catalogo.get(i);
                    if(x.getID() == ID){
                        carrello.add(x);
                        totale = totale+x.getPrezzo();
                    }
                }
            }
            return totale;
        }

    In pratica mi genera l'eccezione NullPointerException quando uso l'istruzione carrello.add(x), ma non capisco perché dato che carrello l'ho inizializzato nel costruttore!

    Inoltre ho notato che non è problema dell'oggetto passato per parametro perché se inizializzo carrello all'interno del metodo funziona tutto perfettamente, però ovviamente il carrello viene ogni volta riscritto ad ogni aggiunta, data la continua inizializzazione ad ogni chiamata del metodo.

    Ragazzi aiutatemi che non riesco ad andare avanti ed è urgente! Se devo postare altro fatemi sapere. Grazie!
    Ultima modifica di LeleFT; 26-08-2014 a 17:19 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Posta esattamente lo stackTrace dell'eccezione che viene generata.

    PS: usa i tag [CODE] ... [/CODE], quando posti del codice (e anche quando posti gli stackTrace), altrimenti perde formattazione ed indentazione.


    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

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Usa il tag CODE, o non si capisce nulla.

    Quello è l'unico costruttore presente? Vedo comunque che verifichi il tipo del tuo oggetto per castarlo al tipo corretto e chiamare getID() e getPrezzo(). Hai pensato di utilizzare una super classe comune in cui dichiarare questi metodi? In questo modo quel metodo diventa lungo un quarto di ora.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Sei sicuro di aver richiamato il costruttore da qualche parte?
    codice:
    User user=new User(nome, username, password, saldo, arrlist);
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Posta esattamente lo stackTrace dell'eccezione che viene generata.

    PS: usa i tag
    codice:
     ...
    , quando posti del codice (e anche quando posti gli stackTrace), altrimenti perde formattazione ed indentazione.


    Ciao.
    Ecco:

    codice:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException    at Deal.User.aggiungiAlCarrello(User.java:90)
        at Grafica.FrameUser$Aggiungi.actionPerformed(FrameUser.java:294)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
    P.S. il rigo 90 fa riferimento a carrello.add(x) di Ristoranti.
    Ultima modifica di elpulga93; 26-08-2014 a 19:34

  6. #6
    Quote Originariamente inviata da schumy2000 Visualizza il messaggio
    Sei sicuro di aver richiamato il costruttore da qualche parte?
    codice:
    User user=new User(nome, username, password, saldo, arrlist);
    Si si fatto.

  7. #7
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Usa il tag CODE, o non si capisce nulla.

    Quello è l'unico costruttore presente? Vedo comunque che verifichi il tipo del tuo oggetto per castarlo al tipo corretto e chiamare getID() e getPrezzo(). Hai pensato di utilizzare una super classe comune in cui dichiarare questi metodi? In questo modo quel metodo diventa lungo un quarto di ora.
    Si c'è un unico costruttore. Per quanto riguarda i metodi purtroppo il progetto me lo chiede così, infatti è una seccatura ogni volta! Perché in pratica la traccia richiede che bisogna usare un interfaccia che accomuni le 4 classi e che abbia un solo metodo per verificare per verificare se un prodotto è acquistabile un meno, quindi devo fare per forza così.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    se riesci ad eseguire in debug meglio, metti un breakpoint alla riga 90 e vedi cosa vale null.
    Se non riesci ad eseguire in debug, ti consiglio PRIMA della NPE di mettere delle stampe a video, del tipo

    System.out.println("Carrello null? + (carrello == null) );

    e vedi che dice.

    poi sarebbe interessante vedere l'intera classe, perché in qualche punto probabilmente fai un set a null, così non ti so dire
    RTFM Read That F*** Manual!!!

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da valia Visualizza il messaggio
    poi sarebbe interessante vedere l'intera classe, perché in qualche punto probabilmente fai un set a null, così non ti so dire

    Sì, anche secondo me da qualche parte viene messo a null il riferimento, per questo la sola parte di codice che hai postato non è sufficiente. Probabilmente, prima di richiamare il metodo "aggiungiAlCarrello()", richiami altri metodi sullo stesso oggetto e uno di questi imposta a null l'ArrayList.


    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

Tag per questa discussione

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.