PDA

View Full Version : [Java] Non riesco a serializzare una lista


francesco289
06-09-2009, 19:17
Ciao a tutti devo serializzare una lista di oggetti Punteggio...mi da sempre errore come posso fare?
Vi riporto il codice che ho scritto...

DataEntry.java

package main;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.util.List;

import javax.swing.*;

class DataEntry extends JPanel implements ActionListener {

JButton b,b2;
JTextField txt;
JTextField txt2;
static JTextArea records;
public int score;
public DataEntry(int score){
super();

this.score=score;
b = new JButton("Inserisci");
b2= new JButton("Visualizza records");
txt=new JTextField("Nome", 20);
txt2=new JTextField(Integer.toString(score),20);
txt2.setEditable(false);
records= new JTextArea(11, 20);
records.setEditable(false);

b.addActionListener(this);
b2.addActionListener(this);
add(txt);
add(txt2);
add(b);
add(b2);
add(records);
}

public void readFile() {
records.setText("");
LinkedList<Punteggio> record=new LinkedList();
record=carica();
// record.get(1);
System.out.println(record.get(1));


}


public void actionPerformed(ActionEvent arg) {

String pressed = arg.getActionCommand();
JButton bottone=(JButton) arg.getSource();
if (pressed.equals("Inserisci")) {
Punteggio p = new Punteggio();
p.setGiocatore(txt.getText());
p.setPunti(Integer.parseInt(txt2.getText()));
salva(p);
readFile();
} else {
//readFile();
}
}





public void salva(Punteggio p) {
LinkedList <Punteggio> punteggi;

punteggi=carica();
punteggi.add(p);
salva(punteggi);
}

/** Salva i primi dieci punteggi della collezione in argomento */
private void salva(LinkedList lista) {
FileOutputStream fout=null;
ObjectOutputStream out;

try {
fout=new FileOutputStream("record.dat");
}
catch(IOException e) {}



try {
out=new ObjectOutputStream(fout);
out.writeObject(lista);
}
catch(IOException e) {}

}



public LinkedList <Punteggio> carica() {

File file = new File("record.txt");
if(!file.exists()) {
return new LinkedList<Punteggio>();
} else {
return carica(file);
}
}


private LinkedList <Punteggio> carica(File file) {
LinkedList <Punteggio> lista = null;

FileInputStream fin=null;
ObjectInputStream in=null;

try {
fin=new FileInputStream(file);
in=new ObjectInputStream(fin);
}
catch(IOException e) {}

try {
lista=(LinkedList<Punteggio>) (in.readObject());
}
catch(IOException e) {}
catch(ClassNotFoundException e) {}

return lista;

}

}

Punteggio.java
package main;

import java.io.*;



public class Punteggio implements Serializable {



private String giocatore;
private int punti;

public String getGiocatore() {
return giocatore;
}

public void setGiocatore(String nome) {
giocatore = nome;
}

public int getPunti() {
return punti;
}

public void setPunti(int punti) {
this.punti = punti;
}

public int compareTo(Object o) {
Punteggio that = (Punteggio) o;
if(that.getPunti() < this.getPunti()) return -1;
if(that.getPunti() > this.getPunti()) return 1;
return 0;
}

}

idee? :mbe:

nucarote
06-09-2009, 19:52
se ci dici anche l'errore magari ti potremmo essere + di aiuto. Per quello che mi ricordo, ti posso consigliare di sostituire int con Integer nella classe Punteggio.

PGI-Bis
06-09-2009, 20:32
int o Integer è uguale - dal punto di vista della serializzazione.

"flusha" dopo la scrittura:

out.flush();

e chiudi i flussi al termine delle operazioni di lettura e scrittura:

out.close();