É estranho não funcionar… tente serializar classes da API (como JFrame, ou JButton) e depois tente resgatá-las. Se der certo, o problema é com sua classe DataTable.
Agora, algumas sugestões para melhoria da classe:
1 - Por que os métodos flush() e close() são chamados duas vezes?
2 - Ao invés de tratar as exceções com try … catch é preferível usar o throws na assinatura do método pois deixa a classe mais genérica (reaproveitamento de código!!).
3 - Ainda quando ao reaproveitamento, não faça o cast dentro do método. Faça isso onde o método é chamado. Isso evita ter que criar um novo método para serializar outro tipo de objeto.
4 - Portabilidade: não use barra invertida para separar diretórios. Apesar de isso funcionar no Windows, em outros SOs não funciona (como no meu caso, que uso Linux). Use a barra comum que funciona em qualquer SO.
Com algumas mudanças, sua classe poderia ficar assim:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class ObjectIO {
public static void writeSerializableObject(Object object, String fileName)
throws IOException {
FileOutputStream fileOut = new FileOutputStream(System
.getProperty("user.dir")
+ "/" + fileName);
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
objectOut.writeObject(object);
objectOut.flush();
objectOut.close();
}
public static Object readSerializableObject(String fileName)
throws IOException, ClassNotFoundException {
FileInputStream fileInp = new FileInputStream(System
.getProperty("user.dir") + "/"
+ fileName);
ObjectInputStream objInp = new ObjectInputStream(fileInp);
return objInp.readObject();
}
}
E uma classe de teste:
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class TesteSerial {
public static void main(String[] args) {
// cria um JFrame
JFrame f = new JFrame("Serialização");
f.setSize(500, 500);
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationRelativeTo(null);
// serializa o dito cujo
try {
ObjectIO.writeSerializableObject(f, "jframe.dat");
} catch (IOException e) {
JOptionPane.showMessageDialog(null, e);
return;
}
// resgata-o e exibe
try {
JFrame a = (JFrame)ObjectIO.readSerializableObject("jframe.dat");
a.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
}
}
}
Com base nisso, faça as adaptações necessárias e verifique se o problema não está na classe a ser serializada.