Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125

    Serializzazione, ObjectOutStream [JAVA]

    Ho un problema. la mia applicazione java dovrebbe salvare una classe GiocatoreUmano che è estensione di una classe Giocatore. Questa ha dei metodi protected.
    il codice viene compilato ma in fase di caricamento non funziona. mi da errore nell i/o.

    codice:
    // Restituisce true se si vuole un'altra carta durante la propria mano
    	// @param g attributo di tipo Giocatore, puntoAvversario di tipo double, matta di tipo boolean
    	// @return un booleano
    	public boolean mano(Giocatore g, double puntoAvversario, boolean matta) {
    			
    			return g.altraCarta(puntoAvversario, matta);
    		}
    	
    	// 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(this.Sfidante);
    				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 = (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!");
    		}
    aiuto!!!!
    "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
    La classe madre Giocatore implementa Serializable???
    Altrimenti non ti fa scrivere gli oggetto sul file.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  3. #3
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    ho implementato serializable sia a Giocatore che a GiocatoreUmano.
    è giusto così?
    e quando salvo e carico devo fare qelche genre di casting o vanno bene le cose così come sono?
    perche ora mi da un errore nel salvataggio!!!!
    "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
    Nell'eccezione fattii stampare il tipo di errore
    e.printStackTrace();

    così si capisce che errore è
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  5. #5
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    e se al posto di mettere...

    outStream.writeObject(this.Sfidante);

    metto...

    outStream.writeObject(this.Sfidante.getClass());

    il file lo salva e vedo che all'interno anche se inmaniera confusa ci sono tutti gli attributi di giocatore.

    ma non carica. dice che c'è un problema di casting
    "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
    Non avevo letto bene , ma il metodo Save lo lanci dall'interno della classe Sfidante???
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  7. #7
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    no. è nella classe Partita. e lo lancio del main
    "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
    Ok allora non devi scrivere outStream.writeObject(this.Sfidante);
    ma outStream.writeObject(sfidante);
    dove sfidante è un istanza della classe Sfidante
    Sfidante sfidante=new Sfidante(...);
    Devi scrivere l'istanza non la classe
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  9. #9
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    se metto solo sfidante o this.sfidante è lo stesso perchè sfifante è l'istanza di "GiocatoreUmano" (estensione di Giocatore) ed è un attributo di partita. Io voglio salvare l'istanza Sfidante e il Credito di Partita.
    Se non metto Sfidante.getClass sembra che nel file ci ha salvato tutta la parte grafica. le label i pannelli della Gui, etc.
    Inivece con .getClass salva solo gli attributi di Giocatore, ma non carica, perchè da un problema di casting...

    ora ti faccio vedere

    codice:
    public class Partita implements Serializable {
    	
    	//Attributi
    	
    	private static final String PATH_SAVE = "settemezzo/sav/";
    	private CardClient mazzoCarte;
    	private Giocatore Sfidante;<- da salvare 
    	private Giocatore Banco;
    	private int Credito;<- da salvare 
    
    	private int Puntata;
    	private Interfaccia video;
    	
    	//Metodi
            ...
            ...
            ...
            ...
            ..
    
            // 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(Sfidante);
    				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 = (Giocatore)inStream.readObject();
                                            ( oppure this.Sfidante = (Giocatore)inStream.readObject().getClass(); )
    
    					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)"

  10. #10
    Utente di HTML.it L'avatar di killall
    Registrato dal
    Feb 2003
    Messaggi
    125
    Nella SuperClasse giocatore ci sono 2 metodi protected static. dici che danno quelli il problema...
    "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.