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

    Problema con la chiusura dei JFrame e NullPointerException

    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:

    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 
    }
    ==>classe AutenticazioneControl <==

    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
    Ultima modifica di LeleFT; 02-08-2021 a 10:24

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quando posti del codice, usa gli appositi tag CODE (pulsante "#" dell'editor), in modo da mantenere indentazione e formattazione. Altrimenti non si capisce nulla.

    Ho cercato di dargli una raddrizzata, ma sono andate perse tutte le indentazioni.


    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 © 2024 vBulletin Solutions, Inc. All rights reserved.