Come mai java.lang.NullPointerException?

di il
31 risposte

Come mai java.lang.NullPointerException?

Ragazzi ho un problema.

Praticamente quando clicco sul bottone esegui mi restituisce questo errore

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at it.unibas.supmaxmin.controllo.AzioneTrova.actionPerformed(AzioneTrova.java:35)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
	at java.awt.Component.processMouseEvent(Component.java:6525)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6290)
	at java.awt.Container.processEvent(Container.java:2234)
	at java.awt.Component.dispatchEventImpl(Component.java:4881)
	at java.awt.Container.dispatchEventImpl(Container.java:2292)
	at java.awt.Component.dispatchEvent(Component.java:4703)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
	at java.awt.Container.dispatchEventImpl(Container.java:2278)
	at java.awt.Window.dispatchEventImpl(Window.java:2750)
	at java.awt.Component.dispatchEvent(Component.java:4703)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Ho catturato l'eccezione ed ho questo:

java.lang.NullPointerException

In pratica dovrei selezionare tramite buttonRadio cosa voglio fare(cercaMax-CercaMin-CercaSuperiore a Cerca Inferiore a e abilitare delle funzioni)

l'actionPermormed dell'azione l'ho scritta in questo modo

public void actionPerformed(ActionEvent e) {
        logger.info("\nCerco Gli Spot\n" + "Classe:" + " " + this.getClass().getName()+"\n");
       try {
        Supermercato s = (Supermercato) this.applicazione.getModello().getBean(Costanti.SUPERMERCATO); [color=#FF0000]--> qui restituisce l'errore[/color]
        PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLO_PRINCIPALE);
        FinestraRicerca fr = (FinestraRicerca) this.applicazione.getVista().getSottoViste(Costanti.FINESTRA_RICERCA);
        String tipo = pp.bottoneSelezionato();
        String prezzoSup = pp.getTextParametro();
        if (tipo.equals("")) {
            JOptionPane.showMessageDialog(pp, "Selezionare un'Azione");
        }
        if (tipo.equals("m")) {
            Scontrino scontrino = s.cercaMax();
            fr.setLabelCodice(scontrino.getCodice());
            fr.setLabelData(String.valueOf(scontrino.getData()));
            fr.setLabelTotale(String.valueOf(scontrino.getTotale()));
            fr.setVisible(true);
            logger.info("\nScontrino Max\n"+""+this.getClass().getName()+"\n");
            logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
            pp.ripulisciRadioButton();    
        }else if (tipo.equals("i")) {
            Scontrino scontrino = s.cercaMin();
            fr.setLabelCodice(scontrino.getCodice());
            fr.setLabelData(String.valueOf(scontrino.getData()));
            fr.setLabelTotale(String.valueOf(scontrino.getTotale()));
            fr.setVisible(true);
            logger.info("\nScontrino Min\n"+""+this.getClass().getName()+"\n");
            logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
            pp.ripulisciRadioButton();   
        }else if (tipo.equals("o")) {
            Double prezzo = Double.parseDouble(prezzoSup);
            Scontrino scontrino = s.cercaMaxSup(prezzo);
            
            logger.info("\nScontrini con prezzo Max di un prezzo dato\n"+""+this.getClass().getName()+"\n");
            logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
            pp.ripulisciRadioButton();  
        }else if (tipo.equals("d")) {
            Double prezzo = Double.parseDouble(prezzoSup);
            Scontrino scontrino = s.cercaMinSup(prezzo);
            
            logger.info("\nScontrini con prezzo Max di un prezzo dato\n"+""+this.getClass().getName()+"\n");
            logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
            pp.ripulisciRadioButton();
        }else if (tipo.equals("s")) {
            applicazione.abilitaAzione(Costanti.AZIONE_AGGIUNGI_PRODOTTO);
            applicazione.abilitaAzione(Costanti.AZIONE_ELIMINA_PRODOTTO);
        }else{
            this.applicazione.getVista().finestraErrore("--ATTENZIONE--");
        }
       }catch (Exception cause) {
            logger.error("errore"+ cause);
        }
    }
In questo modo creo nel mio pannelloPrincipale la bottonGroup ed il metodo che mi restituisce il radiobutton selezionato.

public void inizializzaButtonRadio() {
        ButtonGroup bg = new ButtonGroup();
        bg.add(getRadioButtonMax());
        bg.add(getRadioButtonMin());
        bg.add(getRadioButtonMaxDi());
        bg.add(getRadioButtonMinDi());
        bg.add(getRadioButtonScontrino());
    }

     public String bottoneSelezionato() {
        String selezione = "";
        if(getRadioButtonMax().isSelected()) {
            return selezione = "m";
        }else if (getRadioButtonMin().isSelected()) {
            return selezione = "i";
        }else if (getRadioButtonMaxDi().isSelected()){
            return selezione = "o";
        }else if (getRadioButtonMinDi().isSelected()) {
           return selezione = "d";
        }else if (getRadioButtonScontrino().isSelected()) {
            return selezione = "s";
        }
        return "";
    }
Non riesco proprio a spiegarmi a cosa sia dovuto quell'errore

31 Risposte

  • Re: Come mai java.lang.NullPointerException?

    Potresti postare solo la riga 35, li si trova l'oggetto null che solleva l'eccezione.
  • Re: Come mai java.lang.NullPointerException?

    La riga 35 è questa
    
     Supermercato s = (Supermercato) this.applicazione.getModello().getBean(Costanti.SUPERMERCATO)
    
    non capisco come mai mi dia un java.lang.NullPointerException

    questa chiamata la faccio anche da altre parti nell'applicazione e non mi solleva questo problema.
  • Re: Come mai java.lang.NullPointerException?

    Le opzioni sono 2, o this.applicazione è null, oppure getModello() restituisce null.
    Scrivi questa riga così:
    
    System.out.println(this.applicazione);
    TipoDiOggettoCheGetModelloDeveRestituire x=this.applicazione.getModello();
    System.out.println("x="+x);
    SuperMercato s=(SuperMercato)x.getBean(Costanti.SUPERMERCATO);
    
    Ovviamente al posto di TipoDiOggettoCheGetModelloDeveRestituire devi scrivere il tipo di ritorno di getModello().

    Esegui e riposta l'errore.
  • Re: Come mai java.lang.NullPointerException?

    Ho provato con il codice, al posto di TipoDiOggettoCheGetModelloDeveRestituire ho messo modello e mi stampa null. Quindi dipende dal modello giusto?
  • Re: Come mai java.lang.NullPointerException?

    Ti stampa x=null?
    Se è così devi rivedere il metodo getModello() che in questa situazione ritorna null.
  • Re: Come mai java.lang.NullPointerException?

    Stampa null e poi tutti gli errori che ho messo prima.

    il metodo getModello è questo

    public Modello getModello() {
    return modello;
    }

    mi sembra strano che sia nullo.

    Ora non so forse ho sbagliato a mettere il tuo pezzo di codice, io l'ho messo nel blocco catch dell'actionPerformed dell'azione.
  • Re: Come mai java.lang.NullPointerException?

    Scrivilo prima del blocco try...catch
  • Re: Come mai java.lang.NullPointerException?

    Mi son reso conto che tutte le classi del modello mi restituiscono questa eccezione.

    Da cosa può dipendere?
  • Re: Come mai java.lang.NullPointerException?

    Posta il codice della classe Modello, altrimenti ci vuole la sfera magica...
    Posta anche eventuali classi o interfacce che Modello estende o implementa o da cui dipende
  • Re: Come mai java.lang.NullPointerException?

    Questa è la classe Modello
    
    public class Modello {
        
        private final Map<String,Object> mappaBean = new HashMap<String,Object>();
        
        public Object getBean ( String chiave ) {
            return this.mappaBean.get(chiave);
        }
        
        public void addBean ( String chiave, Object bean ) {
            this.mappaBean.put( chiave, bean );
        }
    
    Classe CatenaSupermercati
    
    public class CatenaSupermercati {
        
        private List<Supermercato> listaSupermercati = new ArrayList<Supermercato>();
        
        public void aggiungiSupermercato(Supermercato s){
            this.listaSupermercati.add(s);
        }
    
        public Supermercato getSupermercato(int i){
            return this.listaSupermercati.get(i);
        }
        
        public Supermercato getSupermercato(String user){
            for (Supermercato s : listaSupermercati) {
               if(s.getUser().equals(user)){
                    return s;
                }
            }
            return null;
        }
        
    }
    
    
    Classe Prodotto
    
    public class Prodotto implements Comparable<Prodotto> {
        
        private String codice;
        private String descrizione;
        private String categoria;
        private double prezzo;
        private Supermercato s;
        
        public Prodotto() {}
      
        public Prodotto(String codice, String descrizione, String categoria, double prezzo, Supermercato s) {
           this.codice = codice;
           this.descrizione = descrizione;
           this.categoria = categoria;
           this.prezzo = prezzo;
           this.s = s;
         }
        
        public String getCodice() {
            return codice;
        }
        
        public void setCodice(String codice) {
            this.codice = codice;
        }
        
        public String getDescrizione() {
            return descrizione;
        }
    
        public void setDescrizione(String descrizione) {
            this.descrizione = descrizione;
        }
    
        public String getCategoria() {
            return categoria;
        }
    
        public void setCategoria(String categoria) {
            this.categoria = categoria;
        }
    
        public double getPrezzo() {
            return prezzo;
        }
    
        public void setPrezzo(double prezzo) {
            this.prezzo = prezzo;
        }
        
         public String getPrezzoDouble() {
            return Double.toString(prezzo);
        }
        
        
        @Override
        public String toString() {
            return "Prodotto " + codice + " " + descrizione + ", categoria=" + categoria + ", prezzo=" + prezzo;
        }
        
        @Override
        public int compareTo(Prodotto o) {
            if (this.getPrezzo() > o.getPrezzo()) {
                return -1;
            } else if (this.getPrezzo() < o.getPrezzo()) {
                return 1;
            }
            return 0;
        }
    
        public Supermercato getSupermercato() {
            return s;
        }
    
        public void setSupermercato(Supermercato s) {
            this.s = s;
        }
        
        
    }
    
    
    Classe prodotto Acquistato
    
    public class ProdottoAcquistato {
        
        private Prodotto prodottos;
        private int quantita;
    
        public ProdottoAcquistato(Prodotto prodottos, int quantita) {
            this.prodottos = prodottos;
            this.quantita = quantita;
        }
    
        public Prodotto getProdotto() {
            return prodottos;
        }
    
        public int getQuantita() {
            return quantita;
        }
        
    }
    
    // Classe Scontrino
    
    ublic class Scontrino {
        
        private String codice;
        private Calendar data;
        private double totale;
        
        private Supermercato supermercato;
        
        private final List<ProdottoAcquistato> listaProdottiAcquistati = new ArrayList<ProdottoAcquistato>();
        
        public Scontrino() {}
        
        public Scontrino(String codice, Calendar data, double totale) {
           this.codice = codice;
           this.totale = totale;
           this.data = data;
           this.data.setLenient(false);
           this.data.getTime();
           
            
        }
    
        public String getCodice() {
            return supermercato.getScontrino();
        }
    
        public void setCodice(String codice) {
            this.codice = codice;
        }
        
        public double getTotale() {
            return calcolaTotale();
        }
    
        public void setTotale(double totale) {
            this.totale = totale;
        }
        
        public Calendar getData() {
            return data;
        }
    
        public void setData(Calendar data) {
            this.data = data;
        }
    
        public List<ProdottoAcquistato> getListaProdotti() {
            return listaProdottiAcquistati;
        }
    
        public void aggiungiProdottoAcquistato(ProdottoAcquistato p) {
            this.listaProdottiAcquistati.add(p);
        }
        
        public void rimuoviProdottoAcquistato(ProdottoAcquistato p) {
            this.listaProdottiAcquistati.remove(p);
        }
        
        public double calcolaTotale() {
            double totale = 0.0;
            for (ProdottoAcquistato prodottoAcquistato : listaProdottiAcquistati) {
                totale += prodottoAcquistato.getQuantita() * prodottoAcquistato.getProdotto().getPrezzo();
            }
            return totale;
        }
         
        @Override
        public String toString() {
            return "Scontrino {" + "Codice:" + getCodice() + "Data:" + data + "Lista Prodotti" + listaProdottiAcquistati + "Totale:" + calcolaTotale();
            
        }
    
        
    }
    
    
    // Classe supermercato
    
    public class Supermercato {
        
        private String nome;
        private String via;
        private String città;
        private String cap;
        private String user;
        private String password;
        private String telefono;
        
        private List<Prodotto> listaProdottoSupermercato = new ArrayList<Prodotto>();
     
        private List<Scontrino> listaScontrini = new ArrayList<Scontrino>();
        
        public Supermercato() {}
        
        public Supermercato(String nome, String via, String città, String cap, String telefono, String user, String password) {
            this.nome = nome;        
            this.via = via;
            this.città = città;
            this.cap = cap;
            this.telefono = telefono;
            this.user = user;
            this.password = password;
        }
    
        public String getNome() {
            return nome;
        }
        
        public void setNome(String nome) {
            this.nome = nome;
        }
    
        public String getVia() {
            return via;
        }
    
        public void setVia(String via) {
            this.via = via;
        }
    
        public String getCittà() {
            return città;
        }
    
        public void setCittà(String città) {
            this.città = città;
        }
        
        public String getCap() {
            return cap;
        }
    
        public void setCap(String cap) {
            this.cap = cap;
        }
    
        public String getUser() {
            return user;
        }
    
        public void setUser(String user) {
            this.user = user;
        }
        
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getTelefono() {
            return telefono;
        }
    
        public void setTelefono(String telefono) {
            this.telefono = telefono;
        }
    
        public List<Prodotto> getListaProdottiSupermercato() {
            return listaProdottoSupermercato;
        }
    
        public List<Scontrino> getListaScontrini() {
            return listaScontrini;
        }
    
        public void setListaScontrini(List<Scontrino> listaScontrini) {
            this.listaScontrini = listaScontrini;
        }
        
        public void aggiungiProdotto(Prodotto pa) {
            this.listaProdottoSupermercato.add(pa);
        } 
        
        public void setListaProdotti(List<Prodotto> listaProdottoSupermrcato) {
            this.listaProdottoSupermercato = listaProdottoSupermercato;
        }
        
        public void aggiungiScontrino(Scontrino s) {
            this.listaScontrini.add(s);
        }
        
        public Prodotto getProdotto(String codiceProdotto) {
            for (Prodotto prodotto : listaProdottoSupermercato) {
                if(prodotto.getCodice().equals(codiceProdotto)){
                    return prodotto;
                }
            }
            return null;
        }
       
        public String getScontrino() {
            StringBuilder sb = new StringBuilder();
            sb.append(nome.substring(0, 3));
            sb.append(città.substring(0, 3));
            sb.append(cap);
            sb.append("-");
            sb.append(0000+listaScontrini.size()-1);
            return sb.toString().toUpperCase();
        }
     }   
    
    Spiego anche brevemente il funzionamento del programma, in pratica voglio gestire una catena di supermercati, ogni supermercato dopo aver effettuato il login con il proprio user e password può effettuare una serie di operazioni, come l'emissione di un nuovo scontrino o la ricerca dello scontrino con l'importo massimo o minimo oppure visualizzare tutti gli scontrini emessi con l'importo superiore o inferiore a quello cercato.

    Queste operazioni avvengono tutte tramite previa seleziona da una button group, ecco qui mi si presenta l'errore, seleziono dalla buttonGroup quello che voglio fare, clicco sul pulsante che dovrebbe permettermi di attivare l'azione e si verifica un java.lang.NullPointerException.

    Stessa cosa quando provo ad aggiungere un prodotto allo scontrino, seleziono il codice del prodotto da una comboBox e quando clicco sul pulsante aggiungi ecco di nuovo una java.lang.NullPointerException.

    // Queste sono le azioni

    Azione Aggiungi
    
    public class AzioneAggiungiProdotto extends AbstractAction {
        
        private Applicazione applicazione;
        
        private Logger logger = (Logger) LoggerFactory.getLogger(AzioneAggiungiProdotto.class);
    
        public AzioneAggiungiProdotto(Applicazione applicazione) {
            this.applicazione = applicazione;
            this.putValue(NAME, "Aggiungi");
            this.putValue(SHORT_DESCRIPTION, "Aggiunge Il Prodotto Selezionato Allo Scontrino");
            this.putValue(MNEMONIC_KEY, KeyEvent.VK_A);
            this.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(" alt a"));
        }
    
        public void actionPerformed(ActionEvent e) {
            PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLO_PRINCIPALE);
            String stringaQuantita = pp.getTextQuantità();
            String codiceProdotto = (String) pp.getComboProdotti().getSelectedItem();
            String errori = convalidaDati(stringaQuantita, codiceProdotto);
            if (!errori.isEmpty()) {
                pp.finestraErrore("Si è verificato il seguente errore:",errori);
                return;
            }
            Supermercato supermercato = (Supermercato) this.applicazione.getModello().getBean(Costanti.SUPERMERCATO);
            Scontrino scontrino = (Scontrino) this.applicazione.getModello().getBean(Costanti.SCONTRINO);
            int quantita = Integer.parseInt(stringaQuantita);
            Prodotto prodotto = supermercato.getProdotto(codiceProdotto);
            ProdottoAcquistato prodottoAcquistato = new ProdottoAcquistato(prodotto, quantita);
           // scontrino.aggiungiProdottoAcquistato(prodottoAcquistato);
            pp.aggiornaDatiScontrino();
           // pp.mostraProdotti((List<ProdottoAcquistato>) prodottoAcquistato);
            pp.resettaCampi();
            }
    
        private String convalidaDati(String stringaQuantita, String codiceProdotto) {
            String errori = "";
            if (stringaQuantita.isEmpty()) {
                errori += "La quantità  è¨ obbligatoria\n";
            } else {
                try {
                    int quantita = Integer.parseInt(stringaQuantita);
                    if (quantita <= 0) {
                        errori += "La quantita' dev'essere un numero maggiore di zero\n";
                    }
                } catch (NumberFormatException ne) {
                    errori += "La quantita' dev'essere un numero intero\n";
                }
            }
            if (codiceProdotto.isEmpty()) {
                errori += "Il codice del prodotto e' obbligatorio\n";
            }
            return errori;
        }
    }
    


    l'errore me lo riporta questa linea di codice
    
    Scontrino scontrino = (Scontrino) this.applicazione.getModello().getBean(Costanti.SCONTRINO);
    
    //Azione Trova
    
    public class AzioneTrova extends AbstractAction{
    
        private Applicazione applicazione;
    
        private Logger logger = (Logger) LoggerFactory.getLogger(AzioneTrova.class);
        
        public AzioneTrova(Applicazione applicazioen) {
            this.applicazione = applicazione;
            this.putValue(NAME, "Esegui");
            this.putValue(SHORT_DESCRIPTION, "Esegui La Scelta");
            this.putValue(MNEMONIC_KEY, KeyEvent.VK_T);
            this.putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke("alt t"));
        }
        
    
        public void actionPerformed(ActionEvent e) {
            logger.info("\nCerco Gli Spot\n" + "Classe:" + " " + this.getClass().getName()+"\n");
            try {
                AnalizzaScontrino as = (AnalizzaScontrino) this.applicazione.getModello().getBean(Costanti.ANALIZZATORE);
                PannelloPrincipale pp = (PannelloPrincipale) this.applicazione.getVista().getSottoViste(Costanti.PANNELLO_PRINCIPALE);
                FinestraRicerca fr = (FinestraRicerca) this.applicazione.getVista().getSottoViste(Costanti.FINESTRA_RICERCA);
                Scontrino scontrino = (Scontrino) this.applicazione.getModello().getBean(Costanti.SCONTRINO);
                String tipo = pp.bottoneSelezionato();
                String prezzoSup = pp.getTextParametro();
                if (tipo.equals("")) {
                    JOptionPane.showMessageDialog(pp, "Selezionare un'Azione");
                }
                if (tipo.equals("m")) {
                    scontrino = as.cercaMax();
                    fr.setLabelCodice(scontrino.getCodice());
                    fr.setLabelData(String.valueOf(scontrino.getData()));
                    fr.setLabelTotale(String.valueOf(scontrino.getTotale()));
                    fr.setVisible(true);
                    logger.info("\nScontrino Max\n"+""+this.getClass().getName()+"\n");
                    logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
                    pp.ripulisciRadioButton();    
                }else if (tipo.equals("i")) {
                    scontrino = as.cercaMin();
                    fr.setLabelCodice(scontrino.getCodice());
                    fr.setLabelData(String.valueOf(scontrino.getData()));
                    fr.setLabelTotale(String.valueOf(scontrino.getTotale()));
                    fr.setVisible(true);
                    logger.info("\nScontrino Min\n"+""+this.getClass().getName()+"\n");
                    logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
                    pp.ripulisciRadioButton();   
                }else if (tipo.equals("o")) {
                    if(prezzoSup.isEmpty()){
                        this.applicazione.getVista().finestraErrore("Attenzione il prezzo non può essere nullo");
                    }else{
                        Double prezzo = Double.parseDouble(prezzoSup);
                        as.cercaMaxSup(prezzo);
                        logger.info("\nScontrini con prezzo Max di un prezzo dato\n"+""+this.getClass().getName()+"\n");
                        logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
                        pp.ripulisciRadioButton();
                    }
                }else if (tipo.equals("d")) {
                    if(prezzoSup.isEmpty()){
                        this.applicazione.getVista().finestraErrore("Attenzione il prezzo non può essere nullo");
                    }else{
                        Double prezzo = Double.parseDouble(prezzoSup);
                        as.cercaMinSup(prezzo);
                        logger.info("\nScontrini con prezzo Max di un prezzo dato\n"+""+this.getClass().getName()+"\n");
                        logger.info("\nRicerca Eseguita Con Successo\n" + "Classe:" + " " + this.getClass().getName()+"\n");
                        pp.ripulisciRadioButton();
                    }
                }else if (tipo.equals("s")) {
                    scontrino = new Scontrino();
                    scontrino.setData(new GregorianCalendar());
                    pp.aggiornaDatiScontrino();
                    applicazione.abilitaAzione(Costanti.AZIONE_AGGIUNGI_PRODOTTO);
                    applicazione.abilitaAzione(Costanti.AZIONE_ELIMINA_PRODOTTO);
                }else{
                    this.applicazione.getVista().finestraErrore("--ATTENZIONE--");
                }
            }catch (Exception cause) {
                logger.error("errore"+ cause);
                logger.info("si è verificato il seguente errore" + cause);
            }
        }
    
    l'errore ce l'ho a questa riga
    Scontrino scontrino = (Scontrino) this.applicazione.getModello().getBean(Costanti.SCONTRINO);
    Poi ho anche notato che se faccio il login con un supermercato dopo aver effettuato il logout entro con le credenziali di un altro supermercato la comboBox carica i codici di tutti e due i supermercati. Questo credo sia risolvibile svuotando la listaProdottiSupermercato quando effetto il ogout(Come si fa a svuotarla tutta)?

    Per gli altri problemi credo che forse dipenda che al login il programma non riesca a capire su quale supermercato effettuare le ricerche, ma non sono sicuro.

    Spero che sia tutto chiaro e di non aver incasinato troppo il post.
  • Re: Come mai java.lang.NullPointerException?

    Ma le classi AzionaTrova e AzioneAggiungiProdotto dove vengono istanziate?
    Ti da l'errore perchè this.applicazione, quando premi il pulsante, è ancora null.
  • Re: Come mai java.lang.NullPointerException?

    Le inizializzo in questo modo:

    prima le inserisco in una classe costanti e poi creo una mappaAzioni nella classe applicazione e le aggiungo e poi armo i bottoni del PannelloPrincipale

    // Costanti
    
    public class Costanti {
        
        //Modello
    
        public final static String CATENA_SUPERMERCATI = CatenaSupermercati.class.getName();
        public final static String SUPERMERCATO = Supermercato.class.getName();
        public final static String PRODOTTO = Prodotto.class.getName();
        public final static String PRODOTTO_ACQUISTATO = ProdottoAcquistato.class.getName();
        public final static String SCONTRINO = Scontrino.class.getName();
        
        //Modello Analizzatore
        
        public final static String ANALIZZATORE = AnalizzaScontrino.class.getName();
        
        // Azione Swing
        
        public final static String AZIONE_LOGIN = AzioneLogin.class.getName();
        public final static String AZIONE_LOGOUT = AzioneLogout.class.getName();
        public final static String AZIONE_ESCI = AzioneEsci.class.getName();
        public final static String AZIONE_INFO = AzioneInfo.class.getName();
        public final static String AZIONE_INDIETRO = AzioneIndietro.class.getName();
        public final static String AZIONE_AGGIUNGI_PRODOTTO = AzioneAggiungiProdotto.class.getName();
        public final static String AZIONE_ELIMINA_PRODOTTO = AzioneEliminaProdotto.class.getName();
        public final static String AZIONE_TROVA = AzioneTrova.class.getName();
        public final static String AZIONE_CASSA = AzioneCassa.class.getName();
        
        // Azioni Visualizza
        
        public final static String AZIONE_VISUALIZZA_SCONTRINI = AzioneVisualizzaScontrini.class.getName();
        public final static String AZIONE_VISUALIZZA_FINESTRA_CERCA = AzioneVisualizzaFinestraCerca.class.getName();
        public final static String AZIONE_VISUALIZZA_FINESTRA_SCONTRINI = AzioneVisualizzaFinestraScontrini.class.getName();
        
        // Vista
        public final static String PANNELLO_PRINCIPALE = PannelloPrincipale.class.getName();
        public final static String PANNELLO_LOGIN = PannelloLogin.class.getName();
        public final static String FINESTRA_RICERCA = FinestraRicerca.class.getName();
        public final static String FINESTRA_VISUALIZZA_SCONTRINI = FinestraVisualizzaScontrini.class.getName();
    }
    
    
    // Applicazione
    
    ublic class Applicazione {
        
        private  Modello modello;
        private  Vista vista;
        private  Map<String,Object> mappaAzioni = new HashMap<String,Object>();
        
        private  Logger logger = LoggerFactory.getLogger(Applicazione.class);
        
        public Applicazione() {
            this.modello = new Modello();
            this.inizializzazione();
            this.vista = new Vista(this, modello);
        }
        
        private void inizializzazione() {
            inizializzaDAO();
            inizializzaAzioni();
            abilitazioniIniziali();
        }
    
        private void inizializzaDAO() {
            IDAO dao = new DAOMock();
            CatenaSupermercati cs;
            try{
                cs = dao.carica(null);
                modello.addBean(Costanti.CATENA_SUPERMERCATI, cs);
                logger.info("\n--- Archivio caricato con successo ---\n");
            } catch(DAOException daoe){
                logger.error("+++ Si e' verificato un errore nella persistenza: " + daoe);
                vista.visualizzaFinestraWarning("Errore nella persistenza, contattare l'amministratore.");
            }
        }
    
        private void inizializzaAzioni() {
            this.mappaAzioni.put(Costanti.AZIONE_ESCI, new AzioneEsci(this));
            this.mappaAzioni.put(Costanti.AZIONE_AGGIUNGI_PRODOTTO, new AzioneAggiungiProdotto(this));
            this.mappaAzioni.put(Costanti.AZIONE_TROVA, new AzioneTrova(this));
            this.mappaAzioni.put(Costanti.AZIONE_ELIMINA_PRODOTTO,new AzioneEliminaProdotto(this));
            this.mappaAzioni.put(Costanti.AZIONE_INDIETRO, new AzioneIndietro(this));
            this.mappaAzioni.put(Costanti.AZIONE_LOGIN, new AzioneLogin(this));
            this.mappaAzioni.put(Costanti.AZIONE_LOGOUT,new AzioneLogout(this));
            this.mappaAzioni.put(Costanti.AZIONE_CASSA, new AzioneCassa(this));
            this.mappaAzioni.put(Costanti.AZIONE_INFO, new AzioneInfo(this));
            this.mappaAzioni.put(Costanti.AZIONE_VISUALIZZA_FINESTRA_CERCA, new AzioneVisualizzaFinestraCerca(this));
            this.mappaAzioni.put(Costanti.AZIONE_VISUALIZZA_SCONTRINI, new AzioneVisualizzaScontrini(this));
            this.mappaAzioni.put(Costanti.AZIONE_VISUALIZZA_FINESTRA_SCONTRINI, new AzioneVisualizzaFinestraScontrini(this));
            
        }
    
        public void abilitazioniIniziali() {
            this.disabilitaAzione(Costanti.AZIONE_LOGOUT);
            this.disabilitaAzione(Costanti.AZIONE_ELIMINA_PRODOTTO);
         //   this.disabilitaAzione(Costanti.AZIONE_AGGIUNGI_PRODOTTO);
            this.disabilitaAzione(Costanti.AZIONE_CASSA);
            this.disabilitaAzione(Costanti.AZIONE_TROVA);
        }
        
        public void disabilitaAzione(String chiave) {
            this.getAction(chiave).setEnabled(false);
        }
        
        public void abilitaAzione(String chiave) {
            this.getAction(chiave).setEnabled(true);
        }
        
        public Modello getModello() {
            return modello;
        }
        
        public Vista getVista() {
            return vista;
        }
        
        public Action getAction( String chiave ) {
            return ( Action ) this.mappaAzioni.get(chiave);
        }
        
        public static void main(String args[]) {
            
             try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(Vista.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(Vista.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(Vista.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(Vista.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    Applicazione applicazione = new Applicazione();
                }
            });
        }
        
    }
    
    
    // PannelloPrincipale
    
    public class PannelloPrincipale extends javax.swing.JPanel {
    
        private Vista vista;
        private Applicazione applicazione;
        private Modello modello;
        private Logger logger = (Logger) LoggerFactory.getLogger(PannelloPrincipale.class);
    
       public PannelloPrincipale(Vista vista) {
            logger.info("\nCreo e Visualizzo il Pannello Principale\n"+"Classe:"+" "+ this.getClass().getName()+"\n");
            this.vista = vista;
            this.applicazione = vista.getApplicazione();
            this.modello = vista.getModello();
            initComponents();
            inizializza();
            this.textNome.setEditable(false);
            this.textVia.setEditable(false);
            this.textCittà.setEditable(false);
            this.textCap.setEditable(false);
            this.textTelefono.setEditable(false);
        }
    
    
        private void inizializza() {
            inizializzaBottoni();
        }
    
        public void inizializzaPannelloSupermercato() {
            Supermercato s = (Supermercato) modello.getBean(Costanti.SUPERMERCATO);
            this.textNome.setText(s.getNome());
            this.textVia.setText(s.getVia());
            this.textCittà.setText(s.getCittà());
            this.textCap.setText(s.getCap());
            this.textTelefono.setText(s.getTelefono());
        }
    
         public JRadioButton getRadioButtonMinDi() {
            return RadioButtonMinDi;
        }
    
        public JRadioButton getRadioButtonMaxDi() {
            return radioButtonMaxDi;
        }
    
        public JRadioButton getRadioButtonMax() {
            return radioButtonMax;
        }
    
        public JRadioButton getRadioButtonMin() {
            return radioButtonMin;
        }
    
        public JRadioButton getRadioButtonScontrino() {
            return radioButtonScontrino;
        }
    
    
        public String getTextParametro() {
            return this.textParametro.getText();
        }
    
        public String getTextQuantità() {
            return this.textQuantità.getText();
        }
    
        public void setTextParametro(String p) {
            this.textParametro.setText(p);
        }
    
        public void setTextQuantità(String p) {
            this.textQuantità.setText(p);
        }
    
         public JComboBox getComboProdotti() {
            return comboProdotti;
        }
    
        public void inizializzaBottoni() {
            this.bottoneAggiungi.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_AGGIUNGI_PRODOTTO));
            this.bottoneElimina.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_ELIMINA_PRODOTTO));
            this.bottoneEsegui.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_TROVA));
            this.bottoneCassa.setAction((Action) this.vista.getApplicazione().getAction(Costanti.AZIONE_CASSA));
        }
    
        public void inizializzaButtonRadio() {
            ButtonGroup bg = new ButtonGroup();
            bg.add(getRadioButtonMax());
            bg.add(getRadioButtonMin());
            bg.add(getRadioButtonMaxDi());
            bg.add(getRadioButtonMinDi());
            bg.add(getRadioButtonScontrino());
        }
    
         public String bottoneSelezionato() {
            String selezione = "";
            if(getRadioButtonMax().isSelected()) {
                return selezione = "m";
            }else if (getRadioButtonMin().isSelected()) {
                return selezione = "i";
            }else if (getRadioButtonMaxDi().isSelected()){
                return selezione = "o";
            }else if (getRadioButtonMinDi().isSelected()) {
               return selezione = "d";
            }else if (getRadioButtonScontrino().isSelected()) {
                return selezione = "s";
            }
            return "";
        }
    
        public void ripulisciRadioButton() {
            this.getRadioButtonMax().setSelected(false);
            this.getRadioButtonMin().setSelected(false);
            this.getRadioButtonMaxDi().setSelected(false);
            this.getRadioButtonMinDi().setSelected(false);
            this.getRadioButtonScontrino().setSelected(false);
       }
    
    
        public void aggiornaDatiScontrino() {
            Scontrino scontrino = (Scontrino) this.applicazione.getModello().getBean(Costanti.SCONTRINO);
            labelTotale.setText("Totale: " + scontrino.calcolaTotale());
            DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
            labelData.setText("Data: " + df.format(scontrino.getData().getTime()));
            labelCodice.setText("Codice:" + scontrino.getCodice());
        }
    
        public void resettaCampi() {
            comboProdotti.setSelectedIndex(0);
            textQuantità.setText("0");
        }
    
        public void resettaScontrino() {
            textAreaScontrino.setText("");
        }
    
        public void aggiornaComboProdotti() {
           // try {
            Supermercato supermercato = (Supermercato) this.applicazione.getModello().getBean(Costanti.SUPERMERCATO);
            comboProdotti.addItem("");
            for (Prodotto prodottos : supermercato.getListaProdottiSupermercato()) {
                comboProdotti.addItem(prodottos.getCodice());
            }
          /*  }catch (Exception message) {
                logger.info("Errore" + message);
            }*/
    
        }
    
        public void mostraProdotti(List<ProdottoAcquistato> prodottiSupermercato) {
            StringBuilder sb = new StringBuilder();
            for (ProdottoAcquistato prodotto : prodottiSupermercato) {
                sb.append(prodotto.toString()).append("\n");
            }
            textAreaScontrino.setText(sb.toString());
        }
    
        public void finestraErrore(String titolo,String messaggio) {
           JOptionPane.showMessageDialog(this,messaggio,titolo,JOptionPane.OK_OPTION);
        }
    
        public void finestraInformazioni(String messaggio) {
            JOptionPane.showConfirmDialog(this, messaggio, " Conferma ", JOptionPane.CLOSED_OPTION);
        }
    
        public int finestraConferma ( String messaggio ) {
           return JOptionPane.showConfirmDialog(this, messaggio, " Conferma ", JOptionPane.INFORMATION_MESSAGE);
        }
    
    
  • Re: Come mai java.lang.NullPointerException?

    Nel codice che hai postato non c'è traccia di istanzazione della classe Applicazione, c'è solo, nel PannelloPrincipale, vista.getApplicazione() che non so cosa fà, posta anche la classe Vista.

    Comunque, a questo punto, hai troppo dipendenze tra i vari oggetti, il che rende le varie classi poco riusabili...
  • Re: Come mai java.lang.NullPointerException?

    La Classe vista è questa
    
    public final class Vista extends javax.swing.JFrame {
    
        private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
        
        private final Modello modello;
        private final Applicazione applicazione;
        private final Map<String,Object> mappaSottoViste = new HashMap<String,Object>();
        
        public Vista(Applicazione applicazione,Modello modello) {
            logger.info("\nCreo e Visualizzo La Vista\n"+"Classe:" +" " + this.getClass().getName()+"\n");
            this.modello = modello;
            this.applicazione = applicazione;
            initComponents();
            inizializza();
            InizializzaSottoViste();
            schermoLogin();
            this.setDefaultCloseOperation(Vista.DO_NOTHING_ON_CLOSE);
            this.addWindowListener(new WindowAdapter() {
                
                @Override
                public void windowClosing(WindowEvent e) {
                    int conferma = JOptionPane.showConfirmDialog(null,"Sicuro Di Voler Uscire Dal Programma ?","Esci", JOptionPane.YES_OPTION);
                    if (conferma == JOptionPane.YES_OPTION) {
                        logger.info("\nUscita dall'Applicazione Avvenuta con Successo\n"+""+this.getClass().getName()+"\n");
                    System.exit(0);
                    }
                }
            });
        
        }
        
        public Object getSottoViste(String nome) {
            logger.debug("\nRichiedo la sotto vista\n " + nome);
            return this.mappaSottoViste.get(nome);
        }
        
        private void inizializza() {
            this.mappaSottoViste.put(Costanti.PANNELLO_PRINCIPALE, new PannelloPrincipale(this));
            this.mappaSottoViste.put(Costanti.PANNELLO_LOGIN, new PannelloLogin(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_RICERCA, new FinestraRicerca(this));
            this.mappaSottoViste.put(Costanti.FINESTRA_VISUALIZZA_SCONTRINI, new FinestraVisualizzaScontrini(this));
        }
    
        private void InizializzaSottoViste() {
            this.setTitle("Benvenuto in Catena Supermercato");
            AzioneEsci ae = (AzioneEsci) this.getApplicazione().getAction(Costanti.AZIONE_ESCI);
            this.itemEsci.setAction(ae);
            AzioneLogout alo = (AzioneLogout) this.getApplicazione().getAction(Costanti.AZIONE_LOGOUT);
            this.itemLogout.setAction(alo);
            AzioneInfo ai= (AzioneInfo) this.getApplicazione().getAction(Costanti.AZIONE_INFO);
            this.itemiInformazioni.setAction(ai);
            AzioneAggiungiProdotto aap = (AzioneAggiungiProdotto) this.getApplicazione().getAction(Costanti.AZIONE_AGGIUNGI_PRODOTTO);
            this.itemAggiungi.setAction(aap);
            AzioneEliminaProdotto aep = (AzioneEliminaProdotto) this.getApplicazione().getAction(Costanti.AZIONE_ELIMINA_PRODOTTO);
            this.itemElimina.setAction(aep);
            AzioneTrova at= (AzioneTrova) this.getApplicazione().getAction(Costanti.AZIONE_TROVA);
            this.itemEsegui.setAction(at);
            AzioneCassa ac = (AzioneCassa) this.getApplicazione().getAction(Costanti.AZIONE_CASSA);
            this.itemCassa.setAction(ac);
        }
    
        public void schermoPrincipale() {
            PannelloPrincipale pp = (PannelloPrincipale) this.getSottoViste(Costanti.PANNELLO_PRINCIPALE);
            PannelloLogin pl = (PannelloLogin) this.getSottoViste(Costanti.PANNELLO_LOGIN);
            JScrollPane scroll = new JScrollPane(pp);
            JScrollPane scroll2 = new JScrollPane(pl);
            this.getContentPane().add(pp);
            this.getContentPane().remove(pl);
            pp.inizializzaPannelloSupermercato();
            pp.aggiornaComboProdotti();
           // this.validate();
            this.pack();
            this.setLocationRelativeTo(null);
            this.setVisible(true);
        }
    
        public void schermoLogin() {
            PannelloPrincipale pp = (PannelloPrincipale) this.getSottoViste(Costanti.PANNELLO_PRINCIPALE);
            PannelloLogin pl = (PannelloLogin) this.getSottoViste(Costanti.PANNELLO_LOGIN);
            JScrollPane scrol2 = new JScrollPane(pp);
            JScrollPane scroll = new JScrollPane(pl);
            this.getContentPane().add(pl);
            this.getContentPane().remove(pp);
            this.pack();
            this.setLocationRelativeTo(null);
            this.setVisible(true);
        }
        
        public void finestraErrore(String string) {
            JOptionPane.showMessageDialog(this,string,"Errore",JOptionPane.ERROR_MESSAGE);
        }
    
        public Modello getModello() {
            return modello;
        }
    
        public Applicazione getApplicazione() {
            return applicazione;
        }
        
        public void visualizzaFinestraWarning(String err) {
            JOptionPane.showMessageDialog(this,err,"Attenzione", JOptionPane.WARNING_MESSAGE);
        }
    
        public void finestraInfoApplicazione() {
            StringBuffer stringa = new StringBuffer();
            stringa.append("\n");
            stringa.append(" Gestione Di Una Catena Di Supermercati \n");
            stringa.append("\n");
            JOptionPane.showMessageDialog( this, stringa, " Informazioni Applicazione ", JOptionPane.INFORMATION_MESSAGE);    
        }
    
Devi accedere o registrarti per scrivere nel forum
31 risposte