Sto provando a creare un programma in cui sono presenti degli Oggetti chiamati grafite,e MnC
che possiedono un valore intero chiamato resa che può essere inserito dall'utente e che deve restare salvato in un file "resa.ser".Il salvataggio dei valori è "azionata" dalla pressione di un pulsante.
IL file viene creato,ma quando riaprendo il programma quando tento di deserializzare i valori rieso a ottenere solo il secondo dei 2.
Questo Codice è una prova "Fatta alla Buona" per non pasticciare in un progetto più grande
(la finestra è proprio minimale).
é la prima volta che provo a utilizzare le strutture dati di java è penso che il problema sia in una sorta di sovrascrittura della Mappa.
Grazie a tutti.
1)la Finestra di prova
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
public class MainFrame extends JFrame{
private JPanel p;
protected JTextField jtfGrafite,jtfMnC;
protected JButton b;
protected Grafite grafite;
protected MnC mnC;
public MainFrame(){
setBounds(50,50,200,200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
p=new JPanel();
p.setLayout(new BorderLayout());
b=new JButton("Scrivi");
jtfGrafite=new JTextField(20);
jtfMnC=new JTextField(20);
grafite=new Grafite();
mnC=new MnC();
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
grafite.setResa(jtfGrafite,"Grafite");
mnC.setResa(jtfMnC,"MnC");
}});
p.add(jtfGrafite,BorderLayout.NORTH);
p.add(jtfMnC,BorderLayout.CENTER);
p.add(b,BorderLayout.SOUTH);
add(p);
}
}
2)Il file contenenti i metodi set e get
package provaresa2;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class FeLega {
Map<Object,String> mappaLeghe=new HashMap();
int resaPrincipale;
int resaSecondaria;
int costo;
//Costruttore vuoto
public FeLega(){
}
//Costruttore con parametri
public FeLega(int resaPrincipale,int resaSecondaria,int costo){
this.resaPrincipale=resaPrincipale;
this.resaSecondaria=resaSecondaria;
this.costo=costo;
}
//metodo getGenerico dove inserire il gtf di riferimento e la chiave della HashMap
public void getResa(JTextField jtf,String feLega){
try{
FileInputStream fis=new FileInputStream(new File("Resa.ser"));
ObjectInputStream s=new ObjectInputStream(fis);
Map<String,String> mappa=new HashMap();
mappa=(HashMap)s.readObject();
String valore=mappa.get(feLega);
jtf.setText(valore);
System.out.println(feLega+"è composta da "+mappaLeghe);
fis.close();
}
catch(Exception e){
e.printStackTrace();
}
}
public void setResa(JTextField jtf,String feLega){
String valore=jtf.getText();
mappaLeghe.put(feLega,valore);
try{
FileOutputStream fos=new FileOutputStream(new File("resa.ser"));
ObjectOutputStream s=new ObjectOutputStream(fos);
s.writeObject(mappaLeghe);
System.out.println(feLega+"è composta da "+mappaLeghe);
fos.close();
}
catch(IOException e){
e.printStackTrace();
}
}
}
class Grafite extends FeLega{
}
class MnC extends FeLega{
}