Salve a tutti, ho un problema nella visualizzazione dei jframe; più precisamente, quando utilizzo il metodo setVisible(false) o dispose(), il frame rimane aperto e mi lancia infatti un'eccezione di NullPointerException nella riga del metodo .
Questo problema però accade solo quando avvio l'applicazione dalla classe principale, avviandola invece direttamente dalla seconda classe (la classe autenticazione) non mi lancia nessuna eccezione e l'applicazione funziona correttamente.
Vi allego il codice:
==>classe AutenticazioneControl <==codice:==>classe SchermataIniziale (classe principale dell'applicazione) <== package InterfacceGrafiche.SchermataIniziale; import Autenticazione.Autenticazione; import Registrazione.Registrazione; import Control.*; /** * * @author me */ public class SchermataIniziale extends javax.swing.JFrame { private AutenticazioneControl control; private RegistrazioneControl control1; /** * Creates new form SchermataIniziale */ public SchermataIniziale() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { //codice del frame auto-generato da netbeans pack(); }// </editor-fold> private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { Registrazione finestra3 = new Registrazione(); finestra3.setVisible(true); frame.dispose(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: Autenticazione finestra2 = new Autenticazione(); finestra2.setVisible(true); //frame.setVisible(false); frame.dispose(); } /** * @param args the command line arguments */ public static void main(String args[]) { /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { frame = new SchermataIniziale(); frame.setVisible(true); } }); } static SchermataIniziale frame; // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JPanel jPanel1; // End of variables declaration } ==>classe Autenticazione <== package Autenticazione; import Control.AutenticazioneControl; import Control.RecuperoPasswordControl; import InterfacceGrafiche.SchermataIniziale.SchermataIniziale; import Entity.Account; import javax.swing.JTextField; import RecuperoPassword.*; import javax.swing.JFrame; /** * * @author me */ public class Autenticazione extends javax.swing.JFrame { private AutenticazioneControl control; private RecuperoPasswordControl control1; private Autenticazione frm; /** * Creates new form Autenticazione */ public Autenticazione() { initComponents(); } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { //codice del frame auto-generato da netbeans pack(); }// </editor-fold> private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try{ control = new AutenticazioneControl(frame); String email= jTextField1.getText().toLowerCase(); String password=jTextField2.getText(); Account account = new Account(email,password,"-","-","-","-","-"); if(control.richiediCredenziali(account,frame)==true){ Account account1 = new Account(email,"-","-","-","-","-","-"); control.schermataIniziale(account1,frame); frame.dispose(); } }catch(Exception e){ System.out.println("Errore"); e.printStackTrace(); } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { RecuperoPassword1 frmRP = new RecuperoPassword1(); frmRP.setVisible(true); frame.setVisible(false); //control1 = new RecuperoPasswordControl(frmRP); } /** * @param args the command line arguments */ public static void main(String args[]) { /* Set the Nimbus look and feel */ //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. * For details see http://download.oracle.com/javase/tu...feel/plaf.html */ 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(Autenticazione.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (InstantiationException ex) { java.util.logging.Logger.getLogger(Autenticazione.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { java.util.logging.Logger.getLogger(Autenticazione.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } catch (javax.swing.UnsupportedLookAndFeelException ex) { java.util.logging.Logger.getLogger(Autenticazione.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); } //</editor-fold> /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { frame = new Autenticazione(); frame.setVisible(true); } }); } public void setControl(Autenticazione frame){ this.frame= frame; } static Autenticazione frame; // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton2; private javax.swing.JDesktopPane jDesktopPane1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JPanel jPanel1; private javax.swing.JPopupMenu jPopupMenu1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; // End of variables declaration }
codice:package Control; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JOptionPane; import Entity.Account; import Entity.Connessione; import Entity.Dipendente; import Autenticazione.Autenticazione; import InterfacceGrafiche.SchermataCustode.SchermataCustode; import InterfacceGrafiche.SchermataAmministratore.SchermataAmministratore; import InterfacceGrafiche.SchermataCliente.SchermataCliente; import InterfacceGrafiche.SchermataAutista.SchermataAutista; /** * @author me *La classe AutenticazioneControl si occupa dell'autentiazione degli impiegati. */ public class AutenticazioneControl extends GenericaControl { private JFrame finestraAttuale ; private Connessione connessione; private List<Account> credenziali= new ArrayList<Account>(); private Dipendente imp; private Account datiAcount; private Account account; private AutenticazioneControl control; private Autenticazione frm; private String codiceID; private Account Dati; /*private SchermataCliente frmCl; private SchermataAmministratore frmAmm; private SchermataCustode frmC; private SchermataAutista frmA;*/ private AutenticazioneControl control1; /** * Inizializza AutenticazioneControl, settando la finestra attuale col frame passato. * @param frame */ public AutenticazioneControl(JFrame frame) { setFinestraAttuale(frame); connessione= new Connessione(); } /** * Crea il frame Login. */ /*public void creaLogin() { Autenticazione form = new Autenticazione(); form.setControl(this); form.setVisible(true); }/* /** * Richiede al DBMS le credenziali, per verificare l'account. * Se l'autenticazione va a buon fine viene creato il frame PannelloDiControllo relativo all'account. * @param credenziali * @param frame */ public boolean richiediCredenziali(Account credenziali ,JFrame frame) { try { setCredenziali(connessione.richiestaCredenziali()); if(verificaCredenziali(credenziali)== false) { JOptionPane.showMessageDialog(finestraAttuale, "L'email o la password sono errati. Riprovare."); }else { JOptionPane.showMessageDialog(finestraAttuale, "Accesso Effettuato"); return true; } }catch(SQLException e) { JOptionPane.showMessageDialog(finestraAttuale, e.getMessage()); } return false; } /** * Verifica se l'account esiste. * @param credenziali le credenziali da verificare. * @return Ritorna true sell'account esiste. */ public boolean verificaCredenziali(Account credenziali) { for(Account c:this.credenziali) { if(c.getEmail().toLowerCase().equals(credenziali.getEmail())&& c.getPassword().equals(credenziali.getPassword())) { setDatiAcount(c); return true; } } return false; } /**Crea il frame PannelloDiControllo relativo all'account. * @param credenziali * @param frameDaChiudere */ /** * @return the connessione */ public Connessione getConnessione() { return connessione; } /** * @param connessione the connessione to set */ public void setConnessione(Connessione connessione) { this.connessione = connessione; } /** * @return the finestraAttuale */ public JFrame getFinestraAttuale() { return finestraAttuale; } /** * @param finestraAttuale the finestraAttuale to set */ public void setFinestraAttuale(JFrame finestraAttuale) { this.finestraAttuale = finestraAttuale; } public List<Account> getCredenziali() { return credenziali; } /** * @param credenziali the credenziali to set */ public void setCredenziali(List<Account> credenziali) { this.credenziali = credenziali; } /** * @return the imp */ public Dipendente getImp() { return imp; } /** * @param imp the imp to set */ public void setImp(Dipendente imp) { this.imp = imp; } /** * @return the datiAcount */ public Account getDatiAcount() { return datiAcount; } public void setDati(Account Dati) { this.Dati = Dati; } /** * @param datiAcount the datiAcount to set */ public void setDatiAcount(Account datiAcount) { this.datiAcount = datiAcount; } public AutenticazioneControl getControl() { return control; } public void setControl(AutenticazioneControl control) { this.control = control; } public void setAccount(Account account){ this.account = account; } public Account getAccount(){ return account; } public boolean controlloAmministratore(String codiceID){ try{ if(connessione.verificaAmministratore(codiceID)==true){ return true; } }catch(SQLException e) { JOptionPane.showMessageDialog(finestraAttuale, e.getMessage()); } return false; } public void schermataIniziale(Account account, JFrame frame) { try { setDati(connessione.richiediAccount(account)); if(Dati.getCodiceID() != null && controlloAmministratore(Dati.getCodiceID())==false) { if(connessione.verificaCustode(Dati.getCodiceID())==true){ JOptionPane.showMessageDialog(finestraAttuale,"Benvenuto, Custode"); SchermataCustode frmC = new SchermataCustode(); control1 = new AutenticazioneControl(frmC); frmC.setVisible(true); frame.setVisible(false); }else{ JOptionPane.showMessageDialog(finestraAttuale,"Benvenuto, Autista"); SchermataAutista frmA = new SchermataAutista(); control1 = new AutenticazioneControl(frmA); frmA.setVisible(true); frame.setVisible(false); } }else{ if(controlloAmministratore(Dati.getCodiceID())==true){ JOptionPane.showMessageDialog(finestraAttuale,"Benvenuto, Amministratore"); SchermataAmministratore frmAmm = new SchermataAmministratore(); control1 = new AutenticazioneControl(frmAmm); frmAmm.setVisible(true); frame.setVisible(false); }else{ JOptionPane.showMessageDialog(finestraAttuale,"Benvenuto, Cliente"); //setFinestraAttuale(frame); SchermataCliente frmCl = new SchermataCliente(); frmCl.setControlAutenticazione(this); //control1 = new AutenticazioneControl(frmCl); frmCl.setVisible(true); //frame.setVisible(false); //frame.dispose(); finestraAttuale.dispose(); //qui mi lancia l'accezione<<<<<<<<<<<<< } } }catch(SQLException e) { JOptionPane.showMessageDialog(frame, e.getMessage()); } } /*public void dispose() { finestraAttuale.dispose(); }*/ }
Questa è l'eccezione che mi lancia:
codice:Errore java.lang.NullPointerException at Control.AutenticazioneControl.schermataIniziale(AutenticazioneControl.java:293) at Autenticazione.Autenticazione.jButton1ActionPerformed(Autenticazione.java:154) at Autenticazione.Autenticazione.access$000(Autenticazione.java:22) at Autenticazione.Autenticazione$1.actionPerformed(Autenticazione.java:78) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
L'applicazione dovrebbe chiudere il frame di Autenticazione e aprire quello della schermata cliente (riga 293). Spero possiate aiutarmi e mi scuso in anticipo per eventuali errori![]()


Rispondi quotando

