No, c'è un qualche errore. In pratica io voglio portarmi Utente utente in modo tale che, quando vado a comprare un prodotto tramite il PannelloAcquisto, i campi dell'utente siano già compilati e recuperati dal login senza dover digitare tutto ogni volta.
Purtroppo però mi esce questo errore che mi fa pensare che l'istanza di Utente sia vuota.
LoginListenerConnected database successfully...
java.lang.NullPointerException
at settepietro20021377.magazzino.dbinterface.DbConnec tion.selezionaAcquistoProdotto(DbConnection.java:5 10)
at settepietro20021377.magazzino.businness.AcquistoMa nager.selezionaProdotto(AcquistoManager.java:23)
at settepietro20021377.magazzino.viewapplicativa.Pann elloInventario$1.mousePressed(PannelloInventario.j ava:50)
at java.awt.AWTEventMulticaster.mousePressed(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(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn 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$500(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$JavaSecurityAccessI mpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessI mpl.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$JavaSecurityAccessI mpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Close database successfully...
codice:public class LoginListener implements ActionListener { PannelloLogin pLogin; public void actionPerformed(ActionEvent e){ String email = pLogin.getEmailText(); String password = pLogin.getPasswordText(); boolean utenteEsiste = UtenteManager.getInstance().verificaLogin(email, password); if(utenteEsiste){ UtenteManager.getInstance().smistaUtente(email); }else{ JOptionPane.showMessageDialog(null, "Utente non riconosciuto"); } pLogin.setVisible(false); } public LoginListener(PannelloLogin pLogin) { this.pLogin = pLogin; } }
UtenteManager
codice:public class UtenteManager { private static UtenteManager instance; //SINGLETON public static UtenteManager getInstance() { if(instance == null) instance = new UtenteManager(); return instance; } public boolean verificaLogin(String email, String password) { Utente utente=new Utente(); utente.setEmail(email); utente.setPassword(password); return utente.login(); } public void smistaUtente(String email){ Utente utente = DbConnection.getInstance().verificaDipendente(email); if(utente.getCategoria().equalsIgnoreCase("Magazziniere")){ new PannelloMagazziniere(); } else if (utente.getCategoria().equalsIgnoreCase("Impiegato")){ new PannelloDipendente(utente); } else if (utente.getCategoria().equalsIgnoreCase("Boss")){ new PannelloCapoProgetto(); } } }
DbConnection --> VerificaDipendente()
codice:public Utente verificaDipendente(String email){ String categoria = ""; Utente utente = new Utente(); try { Class.forName(JDBC_DRIVER); System.out.println("Connecting to a selected database..."); con = DriverManager.getConnection(DB_URL); System.out.println("Connected database successfully..."); st = con.createStatement(); String sql1 = "SELECT * FROM listautenti WHERE email = ?"; PreparedStatement insertStatement1 = con.prepareStatement(sql1); insertStatement1.setString(1, email); rs = insertStatement1.executeQuery(); while(rs.next()) { utente.setNome(rs.getString("nome")); utente.setCognome(rs.getString("cognome")); utente.setEmail(rs.getString("email")); utente.setCategoria(rs.getString("categoria")); utente.setPassword(rs.getString("password")); utente.setSede(rs.getString("sede"));} } catch... } return utente; }
PannelloDipendente
codice:public class PannelloDipendente extends JFrame implements ActionListener{ public static final int LARGHEZZA = 370; public static final int ALTEZZA = 165; private Utente utente; public PannelloDipendente(Utente utente){ setTitle("Pannello Dipendente"); setSize(LARGHEZZA,ALTEZZA); JPanel pannello = new JPanel(); pannello.setLayout(null); JButton visualizzaMagazzino = new JButton("Visualizza Magazzino"); visualizzaMagazzino.setBackground(Color.LIGHT_GRAY); visualizzaMagazzino.addActionListener(this); visualizzaMagazzino.setBounds(30,30, 160,25); pannello.add(visualizzaMagazzino); add(pannello); this.setVisible(true); } public void actionPerformed(ActionEvent e){ PannelloInventario pInventario = new PannelloInventario(utente); }
PannelloInventario()
AcquistoManagercodice:public PannelloInventario(final Utente utente) throws HeadlessException { setSize(670, 480); this.setVisible(true); setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); table = new JTable(tableModel); table.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent me) { JTable table=(JTable)me.getSource(); Point p=me.getPoint(); int row=table.rowAtPoint(p); if(me.getClickCount() == 2) { System.out.println("Doppio click alla riga "+row); Object id = table.getValueAt(row, 0); System.out.println(id); Acquisto pAcquisto = new Acquisto(); pAcquisto.setId((int) id); pAcquisto = AcquistoManager.getInstance().selezionaProdotto(utente, pAcquisto); add(new JScrollPane(table), BorderLayout.CENTER); button = new JButton("Load Data"); button.addActionListener(this); add(button, BorderLayout.PAGE_START); } public void actionPerformed(ActionEvent e){ new SwingWorker<Void, Void>() { protected Void doInBackground() throws Exception { ReturnValues tavolamagazzino = DbConnection.getInstance().VisualizzaMagazzino(); Vector<Vector<Object>> data= tavolamagazzino.getData(); Vector<String> nomeColonne= tavolamagazzino.getNomeColonne(); tableModel.setDataVector(data, nomeColonne); return null; } }.execute(); } }
codice:private static AcquistoManager instance; //SINGLETON public static AcquistoManager getInstance() { if(instance == null) instance = new AcquistoManager(); return instance; } public Acquisto selezionaProdotto(Utente utente, Acquisto p){ Acquisto pAcquisto = DbConnection.getInstance().selezionaAcquistoProdotto(utente, p); return pAcquisto; } public void acquistoProdotto(Acquisto pAcquisto){ new PannelloAcquisto(pAcquisto); boolean checkprodotto = DbConnection.getInstance().verificaAcquistoProdotto(pAcquisto); if(checkprodotto == true){ DbConnection.getInstance().verificaPrezzoAcquisto(pAcquisto); DbConnection.getInstance().compraProdotto(pAcquisto); } } }
DbConnection -> VerificaAcquistoProdotto()
codice:public boolean verificaAcquistoProdotto(Acquisto pAcquisto){ boolean check = false; try { Class.forName(JDBC_DRIVER); System.out.println("Connecting to a selected database..."); con = DriverManager.getConnection(DB_URL); System.out.println("Connected database successfully..."); st = con.createStatement(); String sql1 = "SELECT * FROM listaprodotti WHERE nomeprodotto = ?"; PreparedStatement insertStatement1 = con.prepareStatement(sql1); insertStatement1.setString(1, pAcquisto.getNomeProdotto()); rs = insertStatement1.executeQuery(); if(rs.next()){ if(pAcquisto.getQuantita() <= rs.getInt("disponibilita")){ if(pAcquisto.getQuantita() != 0){ check = true;} } else throw new ProdottoNonOrdinabileException(); ... } return check; }
DbConnection -> compraProdotto()
codice:public void compraProdotto(Acquisto pAcquisto){ try { Class.forName(JDBC_DRIVER); System.out.println("Connecting to a selected database..."); con = DriverManager.getConnection(DB_URL); System.out.println("Connected database successfully..."); st = con.createStatement(); String sql = "INSERT INTO listaacquisti(nomeutente, cognome, progetto, nomeprodotto, quantita, prezzo, prezzofinale, sede) VALUES (?,?,?,?,?,?,?,?)"; PreparedStatement insertStatement = con.prepareStatement(sql); insertStatement.setString(1, pAcquisto.getNomeDipendente()); insertStatement.setString(2, pAcquisto.getCognomeDipendente()); insertStatement.setString(3, pAcquisto.getProgetto()); insertStatement.setString(4, pAcquisto.getNomeProdotto()); insertStatement.setInt(5, pAcquisto.getQuantita()); insertStatement.setDouble(6, pAcquisto.getPrezzo()); insertStatement.setDouble(7, pAcquisto.getPrezzoFinale()); insertStatement.setString(8, pAcquisto.getSede()); insertStatement.execute(); String sql2 = "UPDATE listaprodotti SET disponibilita = disponibilita - ? WHERE nomeprodotto = ?"; PreparedStatement insertStatement2 = con.prepareStatement(sql2); insertStatement2.setInt(1, pAcquisto.getQuantita()); insertStatement2.setString(2, pAcquisto.getNomeProdotto()); insertStatement2.execute(); } catch(... } }
non mi da errore da nessuna parte ma mi pare chiaro che utente non viene portato bene da una classe all'altra. Dove c'è l'inghippo?
Grazie!

Rispondi quotando