Ho usato le tue classi (così come le hai postate, fatto copia ed incolla e aggiunto gli import che hai tralasciato perchè ovvi).
Questa la classe di test che ho usato:
codice:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener {
private JButton cmdSerializza;
private JButton cmdDeserializza;
private JPanel jpCentrale;
private ArchivioRisultati archivio;
public Test() {
Container c = getContentPane();
c.setLayout( new BorderLayout() );
JPanel jpPulsanti = new JPanel( new FlowLayout(FlowLayout.CENTER, 80, 20) );
cmdSerializza = new JButton("Salva");
cmdSerializza.addActionListener( this );
cmdDeserializza = new JButton("Leggi");
cmdDeserializza.addActionListener( this );
jpPulsanti.add( cmdSerializza );
jpPulsanti.add( cmdDeserializza );
jpCentrale = new JPanel();
BoxLayout bLay = new BoxLayout(jpCentrale, BoxLayout.Y_AXIS);
jpCentrale.setLayout( bLay );
c.add(jpPulsanti, BorderLayout.NORTH);
c.add(jpCentrale, BorderLayout.CENTER);
setTitle("Serializzazione");
setSize(800, 600);
setDefaultCloseOperation( EXIT_ON_CLOSE );
setLocationRelativeTo( null );
setVisible( true );
}
private void creaArchivioRisultati() {
archivio = new ArchivioRisultati();
archivio.add( new Risultati("uno", "uno", "uno", 1) );
archivio.add( new Risultati("due", "due", "due", 2) );
archivio.add( new Risultati("tre", "tre", "tre", 3) );
archivio.add( new Risultati("quattro", "quattro", "quattro", 4) );
archivio.add( new Risultati("cinque", "cinque", "cinque", 5) );
}
private void stampaArchivio() {
int numRis = archivio.numMatched();
for(int i=0; i<numRis; i++) {
Risultati r = archivio.getRisultati( i );
JLabel lbl = new JLabel(r.getNomeFile() + " - " + r.getStringaTrovata() + " - " + r.getStringaRimpiazzata() + " - " + r.getPosition());
jpCentrale.add( lbl );
}
jpCentrale.revalidate();
doLayout();
repaint();
}
private void serializza() {
creaArchivioRisultati();
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream("mioSerial.dat");
oos = new ObjectOutputStream( fos );
oos.writeObject( archivio );
oos.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (oos != null) {
try { oos.close(); } catch (Exception e) { }
} else {
if (fos != null) {
try { fos.close(); } catch (Exception e) { }
}
}
}
}
private void deserializza() {
archivio = null; // Mi assicuro di non lavorare su una vecchia copia
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream("mioSerial.dat");
ois = new ObjectInputStream( fis );
archivio = (ArchivioRisultati) ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ois != null) {
try { ois.close(); } catch (Exception e) { }
} else {
if (fis != null) {
try { fis.close(); } catch (Exception e) { }
}
}
}
stampaArchivio();
}
@Override
public void actionPerformed(ActionEvent ae) {
JButton cmd = (JButton) ae.getSource();
if ( cmd.equals(cmdSerializza) ) {
serializza();
} else {
deserializza();
}
}
public static void main(String[] args) {
Test t = new Test();
}
}
Funziona tutto a meraviglia.
Il test l'ho effettuato in questo modo:
1) Ho avviato l'applicazione e ho cliccato su "Salva". Questo ha generato il file.
2) Ho chiuso l'applicazione.
3) Ho riaperto l'applicazione, ho cliccato su "Leggi".
4) Nel pannello centrale, come mi aspetto, vedi i 5 oggetti.
Ciao.