Mazza2
12-09-2002, 21:31
la domanda e' un po' complessa.
dunque: io sto cercando di costruire un programma x la gestione di un campionato di fantacalcio. la storia e' abbastanza complessa e le varibili da salvare sono moltissime, allora ho deciso di affidarmi alla serializzazione che e' molto + semplice che creare un file di testo con tutto quello che serve.
il programma inizia istanziando un oggetto di tipo fantakalcio1 (che estende Jframe) e lo mostra a video. nell'oggetto di tipo fantakalcio, ci sono vari metodi (non statici) che mi permettono di istanziare altri oggetti (ad esempio setSquadre() che mi setta oggetti di tipo Squadra) ed altri.
TUTTI gli oggetti che possono essere istanziati da Fantakalcio1 non hanno metodi statici.
per ora all'oggetto Fantakalcio1 ho addato un jmenu con le voci "nuovo" , "salva" , "chiudi" ,ecc..
l'unico actionlistener che ho fatto finora e' quello del pulsante nuovo.
quando si clicca su nuovo, viene creato un jdialog nel quale vanno inseriti alcuni dati che vengono tutti salvati tramite i metodi che ci sono nell'oggetto fantakalcio1.
alla fine del dialogo, l'utente mi da il nome del file nel quale voler salvare il campionato. allora io ho fatto una cosa di questo genere: l'ultimo pannello del jdialog implementa actionlistener cosi' dopo che l'utente ha premuto il pulsante "fine" nell'actionperformed ho scritto:
fs =null;
try{
//Creo un FileOutputStream col nome scelto
fs=new FileOutputStream(fc.getSelectedFile());
}
catch(IOException e){
JOptionPane.showMessageDialog(null, "Errore di i/o. Controllare che il disco non sia protetto da scrittura.", "Messaggio", JOptionPane.ERROR_MESSAGE);
}
try{
//incapsulo nel ObjectOutputStream
print = new ObjectOutputStream(fs);
print.writeObject(fanta);
print.flush();
print.close();
}
catch(Exception ec){
System.out.println(ec);
System.exit(1);
}
in cui fanta e' l'oggetto fantakalcio.
immancabilmente c'e' un'eccezione nel secondo try (cioe' dove faccio writeObject). allora nel catch faccio stampare quello che dice l'eccezione:
java.io.NotSerializableException: java.io.FileOutputStream
cio' significa che qualcosa non e' serializzabile. quando vado a vedere che cosa ha scritto nel file vedo almeno 20 righe binarie. l'errore non e' quindi subito ma "dopo un po'".
per essere sicuro ho messo in tutte le classi del mio progetto "implements Serializable". ma l'errore e' sempre quello
che io sappia la serializzazione salva tutto tranne i dati transient e i dati statici. poi anche se ci fossero si limiterebbe a non salvarli, non a darmi un'eccezione!
non riesco proprio a capire, mi serve un aiuto!
(puo' centrare qualcosa il fatto che il main e' dentro alla classe Fantakalcio1?? che e' proprio quella che chiedo di serializzare?)
x me no, xke il main e' uno dei tanti metodi statici!
bho...
:(
dunque: io sto cercando di costruire un programma x la gestione di un campionato di fantacalcio. la storia e' abbastanza complessa e le varibili da salvare sono moltissime, allora ho deciso di affidarmi alla serializzazione che e' molto + semplice che creare un file di testo con tutto quello che serve.
il programma inizia istanziando un oggetto di tipo fantakalcio1 (che estende Jframe) e lo mostra a video. nell'oggetto di tipo fantakalcio, ci sono vari metodi (non statici) che mi permettono di istanziare altri oggetti (ad esempio setSquadre() che mi setta oggetti di tipo Squadra) ed altri.
TUTTI gli oggetti che possono essere istanziati da Fantakalcio1 non hanno metodi statici.
per ora all'oggetto Fantakalcio1 ho addato un jmenu con le voci "nuovo" , "salva" , "chiudi" ,ecc..
l'unico actionlistener che ho fatto finora e' quello del pulsante nuovo.
quando si clicca su nuovo, viene creato un jdialog nel quale vanno inseriti alcuni dati che vengono tutti salvati tramite i metodi che ci sono nell'oggetto fantakalcio1.
alla fine del dialogo, l'utente mi da il nome del file nel quale voler salvare il campionato. allora io ho fatto una cosa di questo genere: l'ultimo pannello del jdialog implementa actionlistener cosi' dopo che l'utente ha premuto il pulsante "fine" nell'actionperformed ho scritto:
fs =null;
try{
//Creo un FileOutputStream col nome scelto
fs=new FileOutputStream(fc.getSelectedFile());
}
catch(IOException e){
JOptionPane.showMessageDialog(null, "Errore di i/o. Controllare che il disco non sia protetto da scrittura.", "Messaggio", JOptionPane.ERROR_MESSAGE);
}
try{
//incapsulo nel ObjectOutputStream
print = new ObjectOutputStream(fs);
print.writeObject(fanta);
print.flush();
print.close();
}
catch(Exception ec){
System.out.println(ec);
System.exit(1);
}
in cui fanta e' l'oggetto fantakalcio.
immancabilmente c'e' un'eccezione nel secondo try (cioe' dove faccio writeObject). allora nel catch faccio stampare quello che dice l'eccezione:
java.io.NotSerializableException: java.io.FileOutputStream
cio' significa che qualcosa non e' serializzabile. quando vado a vedere che cosa ha scritto nel file vedo almeno 20 righe binarie. l'errore non e' quindi subito ma "dopo un po'".
per essere sicuro ho messo in tutte le classi del mio progetto "implements Serializable". ma l'errore e' sempre quello
che io sappia la serializzazione salva tutto tranne i dati transient e i dati statici. poi anche se ci fossero si limiterebbe a non salvarli, non a darmi un'eccezione!
non riesco proprio a capire, mi serve un aiuto!
(puo' centrare qualcosa il fatto che il main e' dentro alla classe Fantakalcio1?? che e' proprio quella che chiedo di serializzare?)
x me no, xke il main e' uno dei tanti metodi statici!
bho...
:(