Quando cerco di salvarla mi da l'errore di NullPointerException, come potrei risolvere?
codice:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

/**
 * 
 * @author Riccardo
 * Questa classe crea vari componenti per l'interfaccia grafica atte a comprendere meglio la simulazione di una banca
 */
public class InterfacciaGUI  {
/**
 * Costruttore frame
 */
	public InterfacciaGUI (ArrayList<Operatore> opt,ArrayList<Cliente> cc,ArrayList<BankAccount> ac,ArrayList<Transazione> tr)
	{
		operatore=opt;
		cliente=cc;
		conti=ac;
		transazione=tr;
		frame=new JFrame();
		frame1=new JFrame();
		frame2=new JFrame();
		frame3=new JFrame();
	}
	public void setAccesso1()
	{
		 frame.setSize(300,75);
		 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		 final JRadioButton rbutton=new JRadioButton("Operatore",false);
		 final JRadioButton rbutton2=new JRadioButton("Cliente",false);
		 JButton accedi=new JButton("Accedi");
		 JPanel panel=new JPanel();
		 panel.add(rbutton);
		 panel.add(rbutton2);
		 panel.add(accedi);
		 frame.add(panel);
		 frame.setVisible(true);
		 class AccediListener implements ActionListener
		 {
			public void actionPerformed(ActionEvent e)
			 {
				if(rbutton.getSelectedObjects()!=null)
					setAccesso2();
				else if(rbutton2.getSelectedObjects()!=null)
					setOrdina();
			 }
		 }
		
		 AccediListener listener=new AccediListener();
		 accedi.addActionListener(listener);
	}
	public void setAccesso2()
	{
	frame1.setSize(300,150);
	JLabel labe=new JLabel("Nome utente");
	JLabel labe2=new JLabel("Password");
	final JTextField utente=new JTextField("                       ");
	final JPasswordField pass=new JPasswordField("          ");
	JButton cancella=new JButton("Cancella");
	JButton avvia=new JButton("Avvia");
	JPanel panel=new JPanel();
	panel.add(labe);
	panel.add(utente);
	JPanel panel2=new JPanel();
	panel2.add(cancella);
	panel2.add(avvia);
	JPanel panel3=new JPanel();
	panel3.add(labe2);
	panel3.add(pass);
	frame1.add(panel,BorderLayout.NORTH);
	frame1.add(panel3);
	frame1.add(panel2,BorderLayout.SOUTH);
	frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame1.setVisible(true);
	class LoginListener implements ActionListener
	{
		@SuppressWarnings("deprecation")
		public void actionPerformed(ActionEvent e)
		{
		    boolean trovato=false;
		    int i=0;
		    while(!trovato)
		    {
			    if(i<operatore.size())
			    {
		    	if(utente.getText().equalsIgnoreCase(operatore.get(i).getDati()) && pass.getText().equalsIgnoreCase(operatore.get(i).getMat()))
		    	{
		    	    trovato=true;
		    		setSimulazione();
		    		frame1.setVisible(false);
		    	}
		    	i++;
			    }
			    else
			    {
			    JOptionPane.showMessageDialog(frame2, "Nessun operatore esistente!");
			    break;
		    }
		    }
		}
	}
	 class CancellaListener implements ActionListener
	 {
		 public void actionPerformed(ActionEvent e)
		 {
		 utente.setText("                       ");
		 pass.setText("          ");
		 }
	 }
	 LoginListener listener=new LoginListener();
	 CancellaListener listener2=new CancellaListener();
	 cancella.addActionListener(listener2);
	 avvia.addActionListener(listener);
	}
	public void setSimulazione()
	{
	frame2.setSize(750,270);
	final JTextArea simulation=new JTextArea(10,50);
	JScrollPane scroll=new JScrollPane(simulation);
	JPanel panel=new JPanel();
	panel.add(scroll);
	JButton avvia_s=new JButton("Avvia Simulazione");
	JPanel panel2=new JPanel();
	panel.add(avvia_s);
	frame2.add(panel,BorderLayout.NORTH);
	frame2.add(panel2,BorderLayout.SOUTH);
	frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame2.setVisible(true);
	class AddSimulation implements ActionListener{
		public void actionPerformed(ActionEvent e)
		{
			simulation.setText("Avvio Simulazione\n--------------\n");
			for(int i=0;i<operatore.size();i++)
			{
			    if(i==0)
			    simulation.append("Creo Operatori\n\n\n");
				simulation.append(operatore.get(i).toString()+"\n\n");
			}
			for(int i=0;i<cliente.size();i++)
			{
			    if(i==0)
			    simulation.append("Creo Clienti\n\n\n");
				simulation.append(cliente.get(i).toString()+"\n\n");
			}
			for(int i=0;i<conti.size();i++)
			{
			    if(i==0)
			    simulation.append("Creo Conti Bancari\n\n\n");
				simulation.append(conti.get(i).toString()+"\n\n");
			}
			for(int i=0;i<transazione.size();i++)
			{
			    if(i==0)
			    simulation.append("Creo Transazioni\n\n\n");
				simulation.append(transazione.get(i).toString()+"\n\n");
			}
			for(int i=0;i<conti.size();i++)
			{
			    if(i==0)
			    simulation.append("Saldi Aggiornati\n\n\n");
				simulation.append(conti.get(i).toString()+"\n\n");
			}
		}
	}
	AddSimulation listener=new AddSimulation();
	avvia_s.addActionListener(listener);
	}
	public void setOrdina()
	{
	 frame3.setSize(500,500);
	 String[] s={"Operatori","Clienti","Conti Bancari","Transazioni"};
	 final String[] c={"Informazioni"};
	 final JComboBox combo=new JComboBox(s);
	 final DefaultTableModel model = new DefaultTableModel(c, 0);
	 final JTable table=new JTable(model);
	 JScrollPane scroll1=new JScrollPane(table);
	 JLabel ordina=new JLabel("Ordina per");
	 JPanel north=new JPanel();
	 north.add(ordina);
	 north.add(combo);
	 JPanel center=new JPanel();
	 center.add(scroll1);
	 frame3.add(north,BorderLayout.NORTH);
	 frame3.add(center,BorderLayout.CENTER);
	 frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 frame3.setVisible(true);
	 class OrdinaListener implements ActionListener{
		 public void actionPerformed(ActionEvent e)
		 {
			 switch(combo.getSelectedIndex())
			 {
			 case 0:{Collections.sort(operatore);
			 Object[]rows =new Object[operatore.size()];
			 model.setNumRows(0);
			 for(int i=0;i<operatore.size();i++)
			 {rows[0]=operatore.get(i).toString();
			 model.addRow(rows);
			 }
			 break;
			 }
			 case 1:{Collections.sort(cliente);
			 Object[] rows =new Object[cliente.size()];
			 
			 model.setNumRows(0);
			 for(int i=0;i<cliente.size();i++)
			 {rows[0]=cliente.get(i).toString();
			 model.addRow(rows);
			 }
			 
			 break;
			 }
			 
			 case 2:{Collections.sort(conti);
			 Object[]rows =new Object[conti.size()];
			 model.setNumRows(0);
			 for(int i=0;i<conti.size();i++)
			 {rows[0]=conti.get(i).toString();
			 model.addRow(rows);
			 }
			 break;
			 }
			 case 3:{Collections.sort(transazione);
			 Object[]rows =new Object[transazione.size()];
			 model.setNumRows(0);
			 for(int i=0;i<transazione.size();i++)
			 {rows[0]=transazione.get(i).toString();
			 model.addRow(rows);
			 }
			 break;
			 }
			 }
			 
		 }
	 }
	 OrdinaListener ordina2 = new OrdinaListener();
	 combo.addActionListener(ordina2);
	}
private JFrame frame,frame1,frame2,frame3;
private ArrayList<BankAccount> conti;
private ArrayList<Operatore> operatore;
private ArrayList<Cliente> cliente;
private ArrayList<Transazione> transazione;
}
Grazie in anticipo!!