Ciao!
Ho un problema con la chiusura di una finestra.
Vi spiego: ho una finestra FinestraPrincipale dalla quale apro FinestraCliente, che a sua volta apre o FinestraSocieta o FinestraDitta.
Entrambe aprono FinestraDomanda che può anche creare una nuova FinestraCliente.
Ora, ogni volta che apro una nuova finestra, chiudo quella che l'ha creata! Il problema è proprio questo: la prima volta che apro FinestraCliente dal menù di FinestraPrincipale si chiude normalmente quando apre o FinestraSocieta o FinestraDitta. Quando invece la riapro da FinestraDomanda, non si chiude e il programma mi lancia questa eccezione:
codice:xception in thread "AWT-EventQueue-0" java.lang.NullPointerException at PannelloCliente.actionPerformed(PannelloCliente.java:127) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)La riga 127 del pannello è quella in rosso.codice:public class PannelloCliente extends JPanel implements ActionListener { private ButtonGroup bg; private JRadioButton rb[]; private JButton b; private JTextField testo; private ListNode CLIENTI; private FinestraSocieta RIFE; private FinestraDitta RIFER; private FinestraCliente fin; /** Metodo costruttore senza parametri: istanzia la * ListNode CLIENTI. */ public PannelloCliente(FinestraCliente fin) { super(); this.fin = fin; CLIENTI = new ListNode(); setBackground(new Color(24,153,240)); testo = new JTextField("Ditta individuale o società?"); testo.setEditable(false); rb = new JRadioButton[2]; rb[0] = new JRadioButton("Ditta Individuale"); rb[1] = new JRadioButton("Società"); bg = new ButtonGroup(); bg.add(rb[0]); bg.add(rb[1]); b = new JButton("Avanti"); b.addActionListener(this); setLayout(new GridLayout(4,1)); add(testo); add(rb[0]); add(rb[1]); add(b); } /** Costruttore che accetta come parametro la lista CLIENTI * precedentemente istanziata; in questo modo la lista viene * aggiornata. */ public PannelloCliente(ListNode CLIENTI, FinestraCliente chia) { super(); this.CLIENTI = CLIENTI; fin = chia; setBackground(new Color(24,153,240)); testo = new JTextField("Ditta individuale o società?"); testo.setEditable(false); rb = new JRadioButton[2]; rb[0] = new JRadioButton("Ditta Individuale"); rb[1] = new JRadioButton("Società"); bg = new ButtonGroup(); bg.add(rb[0]); bg.add(rb[1]); b = new JButton("Avanti"); b.addActionListener(this); setLayout(new GridLayout(4,1)); add(testo); add(rb[0]); add(rb[1]); add(b); } /** Metodo per gestire eventi JButton. */ public void actionPerformed(ActionEvent e) { if (rb[0].isSelected()) { /** Creo FinestraDitta passandole come parametri un riferimento * alla lista CLIENTI, e un riferimento alla finestra stessa. * Infine nascondo FinestraCliente. */ FinestraDitta f = new FinestraDitta("Inserisci/Rimuovi cliente"); Container cont = f.getContentPane(); RIFER = f; PanDitta p = new PanDitta(this.CLIENTI, this.RIFER); cont.add(p); f.setVisible(true); fin.setVisible(false); } else { /** Creo FinestraSocieta passandole come parametri un riferimento * alla lista CLIENTI, e un riferimento alla finestra stessa. * Infine nascondo FinestraCliente. */ FinestraSocieta fs = new FinestraSocieta("Inserisci/Rimuovi cliente"); Container conts = fs.getContentPane(); RIFE = fs; PanSocieta pan = new PanSocieta(this.CLIENTI, this.RIFE); conts.add(pan); fs.setVisible(true); fin.setVisible(false); } } }
Vi ringrazio anticipatamente se potete aiutarmi!
![]()

Rispondi quotando