Como abrir um arquivo de ArrayList?

Pessoal, estou travado com isso aqui.
Usei exemplos de varios lugares, até aqui mesmo, e nada.

vejam só.

            private void abrirArquivo(){
            ObjectInputStream input = null;
            JFileChooser fileChooser = new JFileChooser();
            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
          
            int result = fileChooser.showOpenDialog(this);
            
            if (result == JFileChooser.CANCEL_OPTION)
                return;
            
            File fileName = fileChooser.getSelectedFile();
            
            if(fileName == null || fileName.getName().equals(""))
                JOptionPane.showMessageDialog(this, "Nome de Aquivo Invalido", "Nome de Aquivo Invalido",
                        JOptionPane.ERROR_MESSAGE);
            
            else{
                try{
                     input = new ObjectInputStream(new BufferedInputStream(new FileInputStream(fileName)));
                     lDesenhos = (ArrayList) input.readObject();
                     this.repaint(); 
                     input.close();
                }
                catch(IOException ioException){
                    JOptionPane.showMessageDialog(this, "Aquivo não Existe", 
                            "Nome de Aquivo Invalido", JOptionPane.ERROR_MESSAGE);
                }
            
            }
      
      }

A lista de desenhos foi declarada para receber objetos de uma classe q eu defini.

private ArrayList<Shapes> lDesenhos = new ArrayList <Shapes>();

Eu quero copiar os dados do arquivo nessa lista de desenhos, que depois serão recolocados na tela.
Só que nessa linha, está dando um erro.
[/code] lDesenhos = (ArrayList) input.readObject();[code]

[color=blue] Z:\Java\Whiteboard\wb3.851\Whiteboard\src\formatos\Whiteboard.java:490: [/color][color=red]
unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
lDesenhos = (ArrayList) input.readObject();
Note: Z:\Java\Whiteboard\wb3.851\Whiteboard\src\formatos\Whiteboard.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.[/color]

O que estou fazendo de Errado?

A classe dos Objetos tipo Shapes para tirar duvidas

[code]import java.awt.Color;
import java.awt.Graphics;
import java.io.Serializable;

/**

  • Classe que representa as diferentes formas geométricas.

  • @author Pedro Fattore
    */
    public abstract class Shapes implements Serializable {

    /**

    • Variável que determina a grossura do desenho
      /
      protected int largura;
      /
      *
    • Variável que determina a cor do traçado do desenho
      */
      protected java.awt.Color cor;

    protected boolean alteracao;

    /**

    • Função para armazenar os pontos enquanto o mouse se move
    • @param y Representa a coordenada y do ponto
    • @param x Representa a coordenada x do ponto
      */
      public abstract void tracadoMouse( int x, int y);

    /**

    • Função para armazenar o ponto quando o botao do mouse for pressionado
    • @param y Representa a coordenada Y do ponto
    • @param x Representa a coordenada X do ponto
      */
      public abstract void precionaMouse( int x, int y);

    /**

    • Função para armazenar o ponto quando o botao do mouse for solto
    • @param y Representa a coordenada Y do ponto
    • @param x Representa a coordenada X do ponto
      */
      public abstract void soltaMouse( int x, int y);

    /**

    • Funcao que retorna a coordenada X do ponto de determinada posicao do vetor
    • @param posicao Determina de qual ponto sera a coordenada retornada
    • @return Retorna a coordenada X
      */
      public abstract int getX( int posicao );

    /**

    • Funcao que retorna a coordenada Y do ponto de determinada posicao do vetor
    • @param posicao Determina de qual ponto sera a coordenada retornada
    • @return Retorna a coordenada Y
      */
      public abstract int getY( int posicao );

    /**

    • Função que atribui as coordenadas de um ponto a uma determinada posição do vetor
    • @param x Coordenada X do ponto a ser armazenado
    • @param posicao Determina a posicao que as coordenadas devem ser armazenadas
    • @param y Coordenada Y do ponto a ser armazenado
      */
      public abstract void setPonto(int posicao, int x, int y);

    /**

    • Função que desenha a figura
    • @param g Variavel que representa a figura
      */
      public abstract void desenho(Graphics g);

    /**

    • Verifica se o ponto pertence ou não ao traçado da figura
    • @param x Valor da coordenada X do ponto
    • @param y Valor da coordenada Y do ponto
    • @return Retorna Verdadeiro ou Falso
      /
      public abstract boolean pPertence(int x, int y);
      /
      *
    • Define a cor do desenho
    • @param nCor a cor escolhida para o traçado
      */
      public void setCor(java.awt.Color nCor){
      cor = nCor;
      }

    /**

    • Define a largura do traçado do desenho, usando parametros entre 1 e 50
    • @param valor Tamanho da largura
      /
      public void setLargura(int valor){
      largura = valor;
      }
      /
      *
    • Retorna a largura do desenho
      *@return largura
      */
      public int getLargura(){
      return largura;
      }

    /**

    • Retorna a cor do desenho
    • @return Cor do desenho
      */
      Color getColor() {
      return cor;
      }

    /**

    • Construtor da classe
      */
      public Shapes(){

    }
    }[/code]

Leia a mensagem de erro:
unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown

Essa mensagem de erro diz que você deveria ter um try…catch para pegar a ClassNotFoundException ou então você deve adicionar uma cláusula throws no seu método. Isso porque provavelmente o seu método readObject lança essa exceção.