Falha ao salvar minhas classes!

Tenho uma Classe “IO.java” que possui os métodos salvar e abrir.

import java.io.*;
import java.util.*;
import javax.swing.*;

public class IO {
  
  public IO() {
  }
  
  public static void salvar(Vector v) {        
    try {
      JFileChooser escolher = new JFileChooser();
      int res = escolher.showSaveDialog(escolher.getParent());
      if(res == JFileChooser.APPROVE_OPTION) {
        FileOutputStream f = new FileOutputStream(escolher.getSelectedFile().getPath() + ".lvr");
        ObjectOutputStream obj = new ObjectOutputStream(f); 
        obj.writeObject(v);   
        obj.close(); 
      }  
    } catch(IOException e) {
      JOptionPane.showMessageDialog(null,"Erro ao gravar arquivo!","ERRO",JOptionPane.ERROR_MESSAGE);
    }    
  } 
  
  public static Vector abrir() {
    Vector v = new Vector();
    try { 
      JFileChooser escolher = new JFileChooser();
      int res = escolher.showOpenDialog(null);
      if (res == JFileChooser.APPROVE_OPTION) {
        FileInputStream fi; 
        ObjectInputStream obj; 
        fi = new FileInputStream( escolher.getSelectedFile().getPath() ); 
        obj = new ObjectInputStream(fi);
        int i = 0; 
        v = (Vector)obj.readObject();
      }  
    } catch(Exception exc){
      JOptionPane.showMessageDialog(null,"Erro ao ler arquivo!","ERRO",JOptionPane.ERROR_MESSAGE);    
    }
    return (v);
  } 
  
}

Criei a classe “Qualquer.java” para que ela seja salva em um arquivo de texto pela classe “IO.java”

public class Qualquer {
  private String s;
  
  public Qualquer(String s) {
    this.s = s;
  }
  
  public void setS(String s) {
    this.s = s;
  }
  
  public String getS() {
    return s;
  }
}

E uma classe “Teste.java” para executar o salvar e o abrir de um objeto do tipo “Qualquer”

import javax.swing.*;
import java.awt.*;
import java.util.*;

public class Teste {
  public static void main(String args[]) {
    
    Qualquer q = new Qualquer("Oi");
    
    Vector v = new Vector();
    v.add(q);
    IO.salvar(v);
    
    Vector v2 = new Vector();
    v2 = IO.abrir();
    Qualquer q2 = (Qualquer)v2.elementAt(0);
    JOptionPane.showMessageDialog(null, q2.getS());
    
    /*
    String s = new String("Oi");
    
    Vector v = new Vector();
    v.add(s);
    IO.salvar(v);
    
    Vector v2 = new Vector();
    v2 = IO.abrir();
    String s2 = (String)v2.elementAt(0);
    JOptionPane.showMessageDialog(null, s2);
    */
  }  
}

Teoricamente está tudo perfeito, mas só funciona com classes do próprio java, quando tento salvar classes que eu criei da erro. Isso pode ser verificado comentando a parte do “Teste.java” que salva uma String. Mas se eu deixar o código que tenta salvar o objeto do tipo “Qualquer” ocorre erro, e não é só com ela não, toda classe que não seja nativa do java da erro. Porque isso? Alguém pode me dizer o problema?

para q uma classe possa ser salva/enviada por um ObjectOutputStream ela deve implementar a interface Serializable (pacote java.io), essa interface nao possui nenhum metodo, serve apenas para “marcar” as classes que podem ser salvas/enviadas…