Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125

    problema di Serializzazione [JAVA]

    In JAVA
    ho creato 2 procedure x salvare e caricare lo stato di una classe GiocatoreUmano (estesione di Giocatoe) e dell'attributo credito della classe Partita. ho messo Serializable vicino all'intestazione di GiocatoreUmano e di Partita. e l'attributo credito lo converto in una classe x la serializzazione.
    la funzione mi salva ma non carica i dati. ho paura di un problema nelle eccezzioni xchè mi da sempre il problema nell eccezione di IOException del caricamento. Aiuto!!!

    codice:
    // Salva lo stato della partita corrente
    	// @param nomeFile attributo di tipo String
    	public void salva (String nomeFile) {
    		
    			try{
    				video.stampaMsg(PATH_SAVE + nomeFile + ".sav");
    				FileOutputStream outFile = new FileOutputStream(PATH_SAVE + nomeFile + ".sav");
    				ObjectOutputStream outStream = new ObjectOutputStream(outFile);
    				outStream.writeObject(Sfidante);
    				outStream.writeObject(new Integer(Credito));
    				outStream.close();
    				video.stampaMsg("Partita Salvata con successo!");
    			}catch(IOException exc){
    				video.stampaMsg("Errore nell'I/O. Partita non Salvata!");
    			}
    		}
    	
    	// Carica lo stato di una partita precedentemente salvata
    	// @param nomeFile attributo di tipo String
    	public void carica (String nomeFile) {
    
    			try{
    				video.stampaMsg(PATH_SAVE + nomeFile + ".sav");
    				FileInputStream inFile = new FileInputStream(PATH_SAVE + nomeFile + ".sav");
    				ObjectInputStream inStream = new ObjectInputStream(inFile);
    				
    				try{
    					this.Sfidante = (GiocatoreUmano)inStream.readObject();
    					this.Credito = ((Integer)inStream.readObject()).intValue();
    				}catch(ClassNotFoundException exc){
    					video.stampaMsg("Classi non trovate!");
    					System.exit(1);
    				}
    				inStream.close();
    				
    			}catch(IOException exc){
    				video.stampaMsg("Errore nell'I/O. Partita non Caricata!");
    				
    				System.exit(1);
    			}
    			video.stampaMsg("Partita Caricata con successo!");
    			
    		}
    "Sono i miei testi a dirti chi sono, più di qualsiasi cosa tu abbia sentito su come sono fatto dalla cinta in giù (Robert Plant)"

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Controlla di aver serializzato anche le classi interne. Non è automatica la serializzazione nelle classi interne, ma solamente nell'estensione per l'ereditarietà. Dava anche a me, una volta, lo stesso errore, una classe che avevo realizzato, proprio perchè mi ero dimenticato di serializzare anche tutte le classi interne.

    Fai attenzione, poi, ai metodi e agli attributi statici... anche quelli, a volte, creano qualche problemino.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    che intendi x classi interne. le estensioni di una superclasse?
    "Sono i miei testi a dirti chi sono, più di qualsiasi cosa tu abbia sentito su come sono fatto dalla cinta in giù (Robert Plant)"

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    No... quelle sono le estensioni per ereditarietà.
    Questo è un esempio di classe interna (B è classe interna di A):
    codice:
    class A {
       class B {
          ...
       }
       ...
    }
    Per rendere completamente serializzabile A devi serializzare esplicitamente anche B, in questo modo:
    codice:
    class A implements Serializable {
       class B implements Serializable {
          ...
       }
       ...
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    io non ho classi interne ma una superclasse con 3 diverse specializzazioni. solo di 1 voglio la serilizzazione.
    la superclasse è Giocatore.
    l'estensione è GiocatoreUmano.

    ho fatto bene il codice?
    "Sono i miei testi a dirti chi sono, più di qualsiasi cosa tu abbia sentito su come sono fatto dalla cinta in giù (Robert Plant)"

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Beh... se non hai classi interne e vuoi serializzare solamente la class GiocatoreUmano, allora non hai problemi.

    Il codice che hai postato, poi, non ha nemmeno metodi o attributi statici, quindi hai ancora meno problemi.

    Se è solo quello il codice, allora dovrebbe andare.



    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    quel codice sono 2 medodi che sono in partita. la classe giocatoreUmano è un'altro. il problema lo ho quando ci sono le new in carica. perchè nasce l'eccezione di IO
    "Sono i miei testi a dirti chi sono, più di qualsiasi cosa tu abbia sentito su come sono fatto dalla cinta in giù (Robert Plant)"

  8. #8
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    Visto che mi serviva solo il nome del giocatore ho pensato di salvarmi solo il nome e creare l'istanza di GiocatoreUmano in Cerica().
    così funziona!!!!!
    Il problema allora era il salvataggio o il caricamento dell'intera classe Giocatore umano!!!! in essa ci sono dei metodi protected. dici che sia colpa loro?

    codice:
    // Salva lo stato della partita corrente
    	// @param nomeFile attributo di tipo String
    	public void salva (String nomeFile) {
    		
    			try{
    				FileOutputStream outFile = new FileOutputStream(PATH_SAVE + nomeFile + ".sav");
    				ObjectOutputStream outStream = new ObjectOutputStream(outFile);
    				outStream.writeObject(new String(Sfidante.daiNome()));
    				outStream.writeObject(new Integer(this.Credito));
    				outStream.close();
    				video.stampaMsg("Partita Salvata con successo!");
    			}catch(IOException exc){
    				video.stampaMsg("Errore nell'I/O. Partita non Salvata!");
    			}
    		}
    	
    	// Carica lo stato di una partita precedentemente salvata
    	// @param nomeFile attributo di tipo String
    	public void carica (String nomeFile) {
    
    			try{
    				FileInputStream inFile = new FileInputStream(PATH_SAVE + nomeFile + ".sav");
    				ObjectInputStream inStream = new ObjectInputStream(inFile);
    				
    				try{
    					this.Sfidante = new GiocatoreUmano((String)inStream.readObject(), video);
    					this.Credito = ((Integer)inStream.readObject()).intValue();
    				}catch(ClassNotFoundException exc){
    					video.stampaMsg("Classi non trovate!");
    					System.exit(1);
    				}
    				inStream.close();
    				
    			}catch(IOException exc){
    				video.stampaMsg("Errore nell'I/O. Partita non Caricata!");
    				System.exit(1);
    			}
    			video.stampaMsg("Partita Caricata con successo!");
    			
    		}
    "Sono i miei testi a dirti chi sono, più di qualsiasi cosa tu abbia sentito su come sono fatto dalla cinta in giù (Robert Plant)"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.