CIAO A TUTTI!

codice:
public class PannelloLista extends JPanel implements ActionListener, ListSelectionListener {
    private JTextField txt1;
    private JList lista;
    private JButton b;
    private JLabel txt2;
    private PanSocieta riferimento;
    private PanDitta riferimento2;
    private FinestraLista RIFERIMENTO;
    
    private ClienteDittaIndividuale c, c2;
    private FinestraDitta RIFE2;
    private FinestraSocieta RIFE;
    

    /** Metodo costruttore se chiamante è PanSocieta. */
    public PannelloLista(PanSocieta chiamante, FinestraLista CHIAMANTE) {
        super();
        
        setBackground(new Color(102,255,102));
        
        RIFERIMENTO = CHIAMANTE;
        riferimento = chiamante;
        
        txt1 = new JTextField("Lista dei clienti inseriti");
        txt1.setEditable(false);
        txt2 = new JLabel("Premere OK per chiudere la finestra");
        
        int lunghezza = riferimento.CLIENTI.length();
        String[] clienti = new String[lunghezza];
        clienti = riferimento.gc.getNomiClienti(riferimento.CLIENTI);
        lista = new JList(clienti);
        lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        lista.addListSelectionListener(this);
        
        b = new JButton("  OK  ");
        b.addActionListener(this);
        
        add(txt1);
        add(lista);
        add(txt2);
        add(b);
    }
    
    
    
    /** Metodo costruttore se chiamente è PanDitta. */
    public PannelloLista(PanDitta chiamante, FinestraLista CHIAMANTE) {
        super();
        
        setBackground(new Color(102,255,102));
        
        RIFERIMENTO = CHIAMANTE;
        riferimento2 = chiamante;
        
        txt1 = new JTextField("Lista dei clienti inseriti");
        txt1.setEditable(false);
        txt2 = new JLabel("Premere OK per chiudere la finestra");
        
        int lunghezza = riferimento2.CLIENTI.length();
        String[] clienti = new String[lunghezza];
        clienti = riferimento2.gc.getNomiClienti(riferimento2.CLIENTI);
        lista = new JList(clienti);
        lista.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        lista.addListSelectionListener(this);
        
        b = new JButton("  OK  ");
        b.addActionListener(this);
        
        add(txt1);
        add(lista);
        add(txt2);
        add(b);
    }
    
    /** Metodo per gestire eventi JButton. */
    public void actionPerformed(ActionEvent e) {
        /** Nascondo FinestraLista. */
        RIFERIMENTO.setVisible(false);
    }
    
    /** Metodo per gestire eventi JList. */
    public void valueChanged(ListSelectionEvent el) {
        
        
            String NOME = (String) lista.getSelectedValue();
            c = new ClienteDittaIndividuale(NOME);
            c2 = riferimento2.gc.cercaCliente(this.riferimento2.CLIENTI, this.c);
            
            FinestraDitta fd = new FinestraDitta("Dati cliente:");
            Container cont = fd.getContentPane();
            RIFE2 = fd;
            PannelloDatiDitta pd = new PannelloDatiDitta(this.c2, riferimento2.CLIENTI, this.RIFE2);
            cont.add(pd);
            fd.setVisible(true);
     
   }

}
Nella classe GestioneCliente ho questo metodo:
codice:
/** Metodo che cerca un cliente in una ListNode. */
    public ClienteDittaIndividuale cercaCliente(ListNode l, ClienteDittaIndividuale c) {
        if (l.head().equals(c)) {
            ClienteDittaIndividuale c2 = null;
            c2 = (ClienteDittaIndividuale) l.head();
            return c2;
        }
        else {
            l = (ListNode) l.tail();
            return cercaCliente(l, c);
        }
    }
Il programma mi lancia questa eccezione 2 volte:
codice:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at PannelloLista.valueChanged(PannelloLista.java:104)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1765)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1779)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:147)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:194)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:388)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:398)
    at javax.swing.DefaultListSelectionModel.setSelectionInterval(DefaultListSelectionModel.java:442)
    at javax.swing.JList.setSelectionInterval(JList.java:2035)
    at javax.swing.plaf.basic.BasicListUI$Handler.adjustSelection(BasicListUI.java:2716)
    at javax.swing.plaf.basic.BasicListUI$Handler.mousePressed(BasicListUI.java:2672)
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:263)
    at java.awt.Component.processMouseEvent(Component.java:6035)
    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:3983)
    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 104 di PannelloLista è quella in rosso.
Il problema può derivare dal metodo cercaCliente?
GRAZIE MILLE