Erro ao incluir no Banco!

Pessoal, estou tendo problemas ao incluir objeto no banco. Consigo fazer tudo que esta na tela, alterar, excluir, consultar tudo na boa. mas quando fecho a tela esta dando a mensagem de exceção ao sair (que salva o objeto ao sair).

Segue o código do controle e do banco para analise.

CONTROLE:

package controles;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;

import persistencia.BancoAeroGeral;
import persistencia.BancoAeronaves;
import empresas.aereas.AeronaveTransporte;
import empresas.aereas.Jato;
import empresas.aereas.TurboHelice;

public class ControleAeroGeral implements ActionListener {

	private JFrame visao  = null;
	private JPanel painel = null;
	
	private BancoAeronaves banco    = null;
	private AeronaveTransporte aero = null;
	 
	private JTextField txtCodigo     = null;
	private JTextField txtNivel      = null;
	private JTextField txtAutonomia  = null;
	private JTextField txtQuantidade = null;
	private JTextField txtValor      = null;
	private JTextField txtCarga      = null;
	
	private JRadioButton rdbJato        = null;
	private JRadioButton rdbTurboHelice = null;
	
	public ControleAeroGeral(JFrame visao) {
		
		this.visao = visao;
		
		try {
			 banco = new BancoAeronaves();
		    }
		      catch (Exception e) {
		    	                   JOptionPane.showMessageDialog (visao,"Erro ao abrir!");
		                          }
	}
	
		
	public void actionPerformed(ActionEvent evento) {
		
        painel = (JPanel) visao.getContentPane();
        
        txtCodigo     = (JTextField) painel.getComponent(2);
        txtNivel      = (JTextField) painel.getComponent(4);
        txtCarga      = (JTextField) painel.getComponent(6);
        txtAutonomia  = (JTextField) painel.getComponent(8);
        txtQuantidade = (JTextField) painel.getComponent(10);
        txtValor      = (JTextField) painel.getComponent(15);
        
        rdbJato        = (JRadioButton) painel.getComponent(11);
        rdbTurboHelice = (JRadioButton) painel.getComponent(12);
        
        if (evento.getActionCommand().equals("OBTER VALOR DA AERONAVE"))
        	obterValor();
        else
            if (evento.getActionCommand().equals("INCLUIR"))
        	incluir();
            else
            	if (evento.getActionCommand().equals("ALTERAR"))
            		alterar();
            	else
            		if (evento.getActionCommand().equals("CONSULTAR"))
            			consultar();
            		else
            			if (evento.getActionCommand().equals("LIMPAR"))
            			limpar();
            			else
            				if (evento.getActionCommand().equals("EXCLUIR"))
            				excluir();
        					else
        	                 sair(); 
        
	}
	
	
	private void obterValor()
	{
		if ( rdbJato.isSelected())
		{
			aero = new Jato();
			
		}
		else
		{	
			aero = new TurboHelice();
		}
		
		
		 aero.setNivelVoo(Integer.parseInt(txtNivel.getText()));
		 aero.setCapacidadeCarga(Double.parseDouble(txtCarga.getText()));
		 aero.setAutonomia(Double.parseDouble(txtAutonomia.getText()));;
		
		 txtValor.setText(Double.toString(aero.obterValorVenda()));
	}

	private void incluir()
	{
			if ( rdbJato.isSelected())
			{   
			               aero = new Jato();
			    } else {
		                   aero = new TurboHelice();		
			}    
			
			
			if (txtValor.getText().equals(""))
			{
				{JOptionPane.showMessageDialog (visao, "Para cadastrar, confira o valor antes!");}
			
			    } else {
		    
			aero.setCodigoAeronave(txtCodigo.getText());
		    aero.setCapacidadeCarga(Double.parseDouble(txtCarga.getText()));
		    aero.setAutonomia(Double.parseDouble(txtAutonomia.getText()));
		    aero.setNivelVoo(Integer.parseInt(txtNivel.getText()));
		    aero.setQuantidade(Integer.parseInt(txtQuantidade.getText()));
		    aero.setValor(Double.parseDouble(txtValor.getText()));
		    
		    banco.incluir(aero);
		   
		    
		    JOptionPane.showMessageDialog(visao, "Aeronave cadastrada com sucesso!");
		  
	        }
		    
		    limpar(); 
	}
	
	private void alterar()
	{
		if (txtCodigo.getText().equals(""))
		{
			JOptionPane.showMessageDialog(visao, "alteração nao correta");
		
		   } else {	
			
			     aero = new Jato();
		
		    aero.setCodigoAeronave(txtCodigo.getText());
		    aero.setCapacidadeCarga(Double.parseDouble(txtCarga.getText()));
		    aero.setAutonomia(Double.parseDouble(txtAutonomia.getText()));
		    aero.setNivelVoo(Integer.parseInt(txtNivel.getText()));
		    aero.setQuantidade(Integer.parseInt(txtQuantidade.getText()));
		    
		    aero.obterValorVenda();
		
		banco.alterar(aero);
		
		JOptionPane.showMessageDialog(visao, "Aeronave alterada com sucesso!");
		
		}
		
		limpar();
	   
    }
	
	private void limpar()
	{
		txtCodigo.setText    ("");
		txtCarga.setText     ("");
		txtAutonomia.setText ("");
		txtValor.setText     ("");
		txtNivel.setText     ("");
		txtQuantidade.setText("");
	}
	
	
	private void excluir()
	{
		aero = new Jato();
		
		aero.setCodigoAeronave(JOptionPane.showInputDialog(visao, "Digite o codigo da aeronave que deseja excluir: "));
		
		banco.excluir(aero);
		
		JOptionPane.showMessageDialog(visao, "Aeronave excluida com sucesso! Se excluiu sem querer, só lamento!");
	  
		limpar();
	}
	
	private void consultar()
	{
		
		aero = new Jato();
		
		 aero.setCodigoAeronave(JOptionPane.showInputDialog(visao, "Digite o codigo da aeronave: "));
		 				 
				aero = banco.consultar(aero);
	
		 	if (aero != null)
		 	{	 		
		            txtCodigo.setText(aero.getCodigoAeronave());
		            txtNivel.setText(Integer.toString(aero.getNivelVoo()));
		            txtCarga.setText(Double.toString(aero.getCapacidadeCarga()));
		            txtQuantidade.setText(Integer.toString(aero.getQuantidade()));
		            txtAutonomia.setText(Double.toString(aero.getAutonomia()));
		            txtValor.setText(Double.toString(aero.obterValorVenda()));
	        
		 	} else {
			
		 		JOptionPane.showMessageDialog(visao,"aeronave nao encontrada");
		    }
	}
	
	private void sair()
	{
		try {
			banco.sair();
			
	     	} catch (Exception e) 
		         {
	     			JOptionPane.showMessageDialog(visao, "Erro ao sair!");
		         }
	     	finally
	     	{
	     		visao.dispose();
	     	}
	}
	
}

BANCO

package persistencia;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;

import empresas.aereas.AeronaveTransporte;

public class BancoAeroGeral {
	
	private File arquivo= null;
	private Map <String, AeronaveTransporte> tabela = null;
	
	private AeronaveTransporte aero = null;
	
	public BancoAeroGeral() throws Exception 
	{
		arquivo = new File ("aeronavesEstoque.txt");
		
		if (! arquivo.exists())
		{
			tabela = new HashMap <String, AeronaveTransporte> ();
		}
		else
		{ FileInputStream fluxoArquivo = new FileInputStream (arquivo);
		  ObjectInputStream fluxoObjeto = new ObjectInputStream (fluxoArquivo);
		  
		  tabela = (HashMap <String, AeronaveTransporte>)fluxoObjeto.readObject();
		  fluxoObjeto.close();
		}    
		     
	}
	
	public void incluir( AeronaveTransporte aero) {
		
		tabela.put(aero.getCodigoAeronave(), aero);
	}
	
	public void alterar( AeronaveTransporte aero) {
		
		tabela.put(aero.getCodigoAeronave(), aero);
	}

	public AeronaveTransporte consultar( AeronaveTransporte aero) {
		
		aero = tabela.get(aero.getCodigoAeronave());
		
		return aero;
	}
	
	public void excluir (AeronaveTransporte aero) {
		
		tabela.remove(aero.getCodigoAeronave());
		
	}
	
	public void close () throws Exception {
		
		FileOutputStream fluxoArquivo = new FileOutputStream (arquivo);
		ObjectOutputStream fluxoObjeto = new ObjectOutputStream (fluxoArquivo);
		
		fluxoObjeto.writeObject(tabela);
		fluxoObjeto.close();
	}
	
}

Agradeço a colaboração de todos.

http://www.guj.com.br/posts/list/50115.java

Se for preciso, eu posso postar as outras classes para melhor entendimento do programa. Ainda tem 3 classes, e já fiz 2 telas.