Salve ho urgente bisogno di sapere come posso serializzare il mio proggetto
Queste sono le classi
codice:
package mondo;
import java.io.Serializable;

import java.util.*;

public class Stato implements  Serializable{
	private static final long serialVersionUID = 1L;
	public String nome;
	public String capitale;
	public long popolazione;
	public double dimensione;
	public HashSet<String> lingue = new HashSet<String>();
	public HashSet<String> confini = new HashSet<String>();

	public Stato(){
		this.nome=new String();
		this.capitale=new String();
		this.popolazione=0L;
		this.dimensione=0.0d;
		this.lingue=new HashSet<String>();
		this.confini=new HashSet<String>();
		
	}
	
	public String getNome() {
		return nome;
	}

	public String getCapitale() {
		return capitale;
	}

	public long getPopolazione() {
		return popolazione;
	}

	public double getDimensione() {
		return dimensione;
	}

	public HashSet<String> getConfini() {
		return confini;
	}

	public void setNome(String n) {
		nome = n;
	}

	public void setCapitale(String c) {
		capitale = c;
	}

	public void setPopolazione(long p) {
		popolazione = p;
	}

	public void setDimensione(double d) {
		dimensione = d;
	}

	public void setLingue(String l) {
		lingue.add(l);
	}

	public void setConfini(String c) {
		confini.add(c);
	}

	public static Comparator<Stato> comparePop() {
		return new Comparator<Stato>() {
			public boolean equals(Object o) {
				return false;
			}

			public int compare(Stato e1, Stato e2) {
				return (int) (e1.popolazione - e2.popolazione);
			}
		};
	}

	public static Comparator<Stato> compareDim() {
		return new Comparator<Stato>() {
			public boolean equals(Object o) {
				return false;
			}

			public int compare(Stato e1, Stato e2) {
				return (int) (e1.dimensione - e2.dimensione);
			}
		};
	}
}
codice:
package mondo;


import java.util.*;




public class ElencoStati implements  Serializable{

	private static final long serialVersionUID = 1L;

	Vector<Stato> sta = new Vector<Stato>();
	
	public ElencoStati() {
		super();  
		this.sta=new Vector<Stato>();
		
	}
	
	public boolean Esiste(String c){
		boolean t= false;
		int cont=0;
		while (cont< sta.size()) {
			if (((Stato) sta.get(cont)).getNome().contains(c)) {
				t = true;
				break;
			} else {
              cont++;
			}
		}
		return t;
	}

	

	public String getCapitale(String c) {
		String cap = new String();

		if (!(sta.isEmpty())) {
			int i = 0;
			while (i < sta.size()) {
				if ((((String) ((Stato) sta.get(i)).getNome())
						.equalsIgnoreCase(c)))
					cap = (((Stato) sta.get(i)).getCapitale());
				if (i != sta.size())
					i++;
			}
		}
		return cap;
	}

	public long getPopolazione(String c) {
		long pop = 0L;
		if (!(sta.isEmpty())) {
			int i = 0;
			while (i < sta.size()) {
				if ((((String) ((Stato) sta.get(i)).getNome())
						.equalsIgnoreCase(c)))
					pop = (((Stato) sta.get(i)).getPopolazione());
				if (i != sta.size())
					i++;
			}
		}
		return pop;
	}

	public double getDimensione(String c) {
		double dim = 0.0d;
		if (!(sta.isEmpty())) {
			int i = 0;
			while (i < sta.size()) {
				if ((((String) ((Stato) sta.get(i)).getNome())
						.equalsIgnoreCase(c)))
					dim = (((Stato) sta.get(i)).getDimensione());
				if (i != sta.size())
					i++;
			}
		}

		return dim;
	}

	
}

codice:
package mondo;



import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionPane;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class Scelta extends JFrame {
	private static final long serialVersionUID = 1L;

	JLabel label = null;
	JScrollBar vscroll = null;
	JTextArea area = null;
	JButton button1 = null;
	JButton button2 = null;
	JButton button3 = null;
	JButton button4 = null;
	JButton button5 = null;
	JButton button6 = null;
	JButton button7 = null;
	JButton button8 = null;
	JButton button9 = null;
	JButton button10 = null;
	JButton button11 = null;
	JButton button12 = null;

	ElencoStati el = new ElencoStati();
	 Stato s=new Stato();
	double dimensione = 0.0d;
	long popolazione = 0L;

	public Scelta() {
		super("Mappa geografica");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		label = new JLabel("Clicca su uno dei bottoni");
		button1 = new JButton("Aggiungi");
		button2 = new JButton("Cerca capitale");
		button3 = new JButton("Cerca popolazione");
		button4 = new JButton("Cerca dimensione");
		button5 = new JButton("Set confini");
		button6 = new JButton("Carica Dati");
		button7 = new JButton("Confinano?");
		button8 = new JButton("Numero confini");
		button9 = new JButton("Confinanti");
		button10 = new JButton("Ordina per popolazione");
		button11 = new JButton("Ordina per dimensione");
		button12 = new JButton("Stampa elenco");
		vscroll = new JScrollBar();
		area = new JTextArea(30,10);

		[B]button1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				area.setText("");
				String nome = JOptionPane.showInputDialog(null,
						"Inserire il nome dello stato: ");
				if (el.Esiste(nome) == false) {
					String capitale = JOptionPane.showInputDialog(null,
							"Inserire la capitale dello stato: ");
					try {
						popolazione = Long.parseLong(JOptionPane
								.showInputDialog(null,
										"Inserisci la popolazione: "));
					} catch (NumberFormatException e2) {
						JOptionPane.showMessageDialog(null,
								"Valore non valido devi inserire un long");
					}
					try {
						dimensione = Double.parseDouble(JOptionPane
								.showInputDialog(null,
										"Inserire la dimensione: "));
					} catch (NumberFormatException e1) {
						JOptionPane.showMessageDialog(null,
								"Valore non valido devi inserire un double");
					}
                   
					Stato s = new Stato();
					s.setNome(nome);
					s.setCapitale(capitale);
					s.setPopolazione(popolazione);
					s.setDimensione(dimensione);
					el.sta.add(s);

				}

				else
					area.setText("Lo Stato " + nome + " è già presente");
				
                          [B]
			}
		}

		);
		button2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				area.setText("");
				
				String cercato = JOptionPane
						.showInputDialog(null,
								"Inserire il nome dello stato di cui si vuole conoscere la capitale: ");
				
					String n = el.getCapitale(cercato);
					area.setText("La capitale e' : " + n);

				} 
			}
		

		);
		button3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				area.setText("");
				String cercato1 = JOptionPane
						.showInputDialog(null,
								"Inserire il nome dello stato di cui si vuole conoscere la popolazione: ");
				if (el.Esiste(cercato1)) {
					long p = el.getPopolazione(cercato1);
					area.setText("La popolazione e' : " + p);

				} else
					area.setText("Lo Stato " + cercato1 + " non è presente");
			}
		}

		);
		button4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				area.setText("");
				String cercato2 = JOptionPane
						.showInputDialog(null,
								"Inserire il nome dello stato di cui si vuole conoscere la dimensione: ");
				if (el.Esiste(cercato2)) {
					double d = el.getDimensione(cercato2);
					area.setText("La dimensione e' : " + d);
				} else
					area.setText("Lo Stato " + cercato2 + " non è presente");
			}
		}

		);
		
		
		

		JPanel panel1 = new JPanel();
		panel1.setLayout(new GridLayout(6, 1));
		panel1.add(button1);
		panel1.add(button2);
		panel1.add(button3);
		panel1.add(button4);
		panel1.add(button5);
		panel1.add(button6);
		JPanel panel2 = new JPanel();
		panel2.setLayout(new GridLayout(6, 1));
		panel2.add(button7);
		panel2.add(button8);
		panel2.add(button9);
		panel2.add(button10);
		panel2.add(button11);
		panel2.add(button12);
		JPanel panel3 = new JPanel();
		panel3.setLayout(new GridLayout(1, 2));
		panel3.add(area);
		panel3.add(vscroll);
		Container panel = getContentPane();
		panel.setLayout(new BorderLayout());
		panel.add(panel2, BorderLayout.EAST);
		panel.add(panel1, BorderLayout.WEST);
		panel.add(panel3, BorderLayout.CENTER);
		panel.add(label, BorderLayout.NORTH);
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
		pack();

	}

	public static void main(String[] args) {
		Scelta app = new Scelta();
		app.setVisible(true);

	}
}
ho provato a mettere il seguente codice alla fine del blocco in grassetto ma niente:

codice:
try{
			ObjectOutputStream os=new ObjectOutputStream(new FileOutputStream("TestFile.dat"));
			os.writeObject(el);
			os.flush();
			os.close();
		}
		catch(IOException e){
			System.out.println("error writing to file");
			System.exit(1);
		}
		/**
		 * Legge il contenuto del file
		 */
		ElencoStati a;
		try{
			ObjectInputStream is=new ObjectInputStream(new FileInputStream("TestFile.dat"));
			a=(ElencoStati)is.readObject();
			is.close();
			
		}
		catch(IOException ex){
			System.out.println("file not found");
			System.exit(1);
		}
		catch(ClassNotFoundException e1){
			System.out.println("couldn't find class");
			System.exit(5);
		}
Dov'è l'errore?