Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160

    [JAVA] java.lang.ClassCastException

    Ennesimo problema.
    Allora prima di tutto salvo in un file .dat con ObjectOutputStream una serie di oggetti dello stesso tipo.
    Quando però vado a "recuperarli" con un ObjectInputStream mi genera un eccezzione java.lang.ClassCastException
    perchè non riesca a castare da String a Pezzo che sarebbe la serie di oggetti in precedenza salvati!
    Quello che non riesco a capire è perchè un file .dat vada a gestire gli oggetti salvati come String.
    Sapete dirmi come risolvere questo tipo di problema?!?Graziee

    Posto qui sotto la porzione di codice che mi genera l'eccezione:

    codice:
    if (e.getComponent().getName().equals("load")) { 
    	try { 
    	     ObjectInputStream carica = new ObjectInputStream(newFileInputStream( 
    		"/home/sinapsi/Scrivania/Eclipse/testng/partiteSalvate/salvataggio.dat"));
     		for (int y = 0; y < 8; y++) {
    			for (int x = 0; x < 8; x++) { 	
    				scacchieraDaCaricare.metti((Pezzo) carica.readObject(), new Casella(x, y)); 					  
                            }
                    }
      	} catch (Exception e1) {
            	e1.printStackTrace();
     	} 		
    }

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Credo che il tuo post sia un po' confuso: se vai a salvare nel file .dat delle stringhe è normale che poi il casting a Pezzo fallisca. In caso contrario, verifica che tipo di oggetti stai effettivamente caricando dal file serializzato:

    codice:
    System.out.println(carica.readObject().getClass().getName());
    Se non sono tutti oggetti di tipo Pezzo (o una sua sottoclasse) il casting è errato

  3. #3
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    codice:
    if (e.getComponent().getName().equals("save")) { 			try { 				ObjectOutputStream salva = new ObjectOutputStream(new FileOutputStream( 						"/home/sinapsi/Scrivania/Eclipse/testng/partiteSalvate/salvataggio.dat", true)); 				for (int y = 0; y < 8; y++) { 					for (int x = 0; x < 8; x++) { 						salva.writeObject(scacchieraDaSalvare.getPezzoAtPosizione(new Casella(x, y)) + "\n"); 					} 				} 				JOptionPane.showMessageDialog(null, "Partita Salvata", "Salva", JOptionPane.ERROR_MESSAGE); 				salva.close(); 				return; 			} catch (IOException e1) { 				e1.printStackTrace(); 				JOptionPane.showMessageDialog(null, "Partita NON Salvata", "Salva", JOptionPane.ERROR_MESSAGE); 			} 		}
    Guarda io salvo così!!
    Magari sbaglio ma sono convinto di salvare oggetti non stringhe

  4. #4
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    Originariamente inviato da desa
    Credo che il tuo post sia un po' confuso: se vai a salvare nel file .dat delle stringhe è normale che poi il casting a Pezzo fallisca. In caso contrario, verifica che tipo di oggetti stai effettivamente caricando dal file serializzato:

    codice:
    System.out.println(carica.readObject().getClass().getName());
    Se non sono tutti oggetti di tipo Pezzo (o una sua sottoclasse) il casting è errato
    ù

    Facendo una specie di debug come mi hai suggerito mi stampa in console java.lang.string
    Quindi evidentemente me le salva come String, anche se non ne capisco il motivo...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lomio
    Guarda io salvo così!!
    Magari sbaglio ma sono convinto di salvare oggetti non stringhe
    Hai fatto:

    codice:
    salva.writeObject(scacchieraDaSalvare.getPezzoAtPosizione(new Casella(x, y)) + "\n");
    Ora ... io posso anche non sapere che tipo restituisce getPezzoAtPosizione() ... ma se ci concateni "\n", quello che so e di certo succede è che viene invocato il toString() su quell'oggetto e la stringa fornita si concatena a "\n".
    Quindi stai serializzando una banale stringa. Cosa fornisce il toString() non lo so, non so se lo hai reimplementato tu oppure rimane quello in Object.

    In ogni caso non ha senso. Non serve che serializzi una stringa ... serializza l'oggetto vero e proprio. getPezzoAtPosizione() ritorna un oggetto es. PezzoScacchiera?? Bene, nel punto del readObject() dovrai fare un cast a PezzoScacchiera.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    Ok, chiarissimo come sempre!
    Grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.