Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    notSerializableExcpetion

    ciao a tutti, ho un problema con una classe, non riesco a serializzarla: quando viene invocato il metodo di deserializzazione mi lancia notSerializableExcpetion.

    La classe grossomodo è la seguente:

    public class Categoria implements Serializable {

    codice:
        private String nome;
        private LinkedList<Coordinate> posizioni;
    private static LinkedList<Categoria> categorieCustom = new LinkedList<Categoria>();
    private static Categoria[] categorieDefault = ...
    private static final String[] CATEGORIE_PREINIT = ...
    
    
    private Categoria(String nome){
            this.nome = nome;
        }
    
    public Categoria(String nome, LinkedList<Coordinate> posizioni){
            this.nome = nome;
            this.posizioni = posizioni;
            categorieCustom.add(this);
            salva();//salva le categorie su file
        }
    
    private void salva(){
            ObjectOutputStream out = null;
            try {
                FileOutputStream fileOut = new FileOutputStream("catcustom.bin");
                out = new ObjectOutputStream(fileOut);
                out.writeObject(categorieCustom);
            } catch (IOException ex) {
                Logger.getLogger(Categoria.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    out.close();
                } catch (IOException ex) {
                    Logger.getLogger(Categoria.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    
    public static void caricaCategorie(){
            ObjectInputStream in = null;
            try {
                FileInputStream fileIn = new FileInputStream("catcustom.bin");
                in = new ObjectInputStream(fileIn);
                try {
                    categorieCustom = (LinkedList<Categoria>) in.readObject();
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(Categoria.class.getName()).log(Level.SEVERE, null, ex);
                }
            } catch (IOException ex) {
                Logger.getLogger(Categoria.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    in.close();
                } catch (IOException ex) {
                    Logger.getLogger(Categoria.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    /*vari metodo tostring, get, e set... */
    non riesco a trovare l'errore, gli uniche due variabili non static sono un oggetto String e una LinkedList di Coordinate, entrambe Serializable

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: notSerializableExcpetion

    Originariamente inviato da walkerjitzu
    ciao a tutti, ho un problema con una classe, non riesco a serializzarla: quando viene invocato il metodo di deserializzazione mi lancia notSerializableExcpetion.
    Innanzitutto se stampi in modo completo la eccezione, nel messaggio c'è il dettaglio di quale è la classe che "offende" la serializzazione.
    Questa dovresti precisarla.


    Originariamente inviato da walkerjitzu
    La classe grossomodo è la seguente:

    codice:
    public class Categoria implements Serializable {
        
        private String nome;
        private LinkedList<Coordinate> posizioni;
    private static LinkedList<Categoria> categorieCustom = new LinkedList<Categoria>();
    private static Categoria[] categorieDefault = ...
    private static final String[] CATEGORIE_PREINIT = ...
    
    
    private Categoria(String nome){
            this.nome = nome;
        }
    
    public Categoria(String nome, LinkedList<Coordinate> posizioni){
            this.nome = nome;
            this.posizioni = posizioni;
            categorieCustom.add(this);
            salva();//salva le categorie su file
        }
    .....
    Vista così non mi sembra nulla di sbagliato.
    Ma .... Coordinate cosa è? Anche se mi dici che tu l'hai marcata Serializable, potrebbe non essere deserializzabile.

    Nota: marcare con Serializable non è affatto una "garanzia" di serializzabilità! Ci possono comunque essere diversi aspetti che precludono la (de)serializzazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ah si mi sono dimenticato di dirlo, la classe non serializzabile è Categoria.
    Coordinate è una classe molto semplice:

    codice:
    public class Coordinate implements Serializable { 
    private int x; private int y;
     
    public Coordinate(int x, int y){
     this.x = x; this.y = y; }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Anche Coordinate mi pare ok, per quanto hai postato. E continuo a non veder nulla di strano sul fronte della (de)serializzazione.

    Ripeto: hai un NotSerializableException? Stampa o logga il messaggio della eccezione perché contiene il dettaglio importante di quale è la classe che dà problemi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    non so perché, ma adesso funziona. Eppure non ho cambiato niente
    o forse sono un programmatore sonnambulo?

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.