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

    [Java] Errore nella serializzazione di una classe

    Sto cercando di serializzare un oggetto. Esso però ha referenze con la classe java.io.FileReader. Allora ho creato una nuova classe FileReaderMio.java così composta


    codice:
    import java.io.*;
    import java.lang.Object.*;
    
    public class FileReaderMio extends FileReader implements Serializable
    {
    	public FileReaderMio(File file) throws FileNotFoundException {
    			super(file);		
    	}
    		
    	public FileReaderMio(FileDescriptor fd) throws FileNotFoundException {
    			super(fd);
    	}
    
    	public FileReaderMio(String fileName) throws FileNotFoundException {
    			super(fileName);
    	}
    }

    compilo senza errori, ma l'esecuzione mi dà:
    codice:
    java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    	java.io.InvalidClassException: FileReaderMio; no valid constructor
    	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:157)
    	at FPV_Stub.ottieniAnimazione(Unknown Source)
    	at Client.main(Client.java:72)
    Caused by: java.io.InvalidClassException: FileReaderMio; no valid constructor
    	at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:428)
    	at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:268)
    	at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:504)
    	at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1546)
    	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1912)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1836)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
    	at java.awt.Component.readObject(Component.java:7482)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:585)
    	at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:919)
    	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1813)
    	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1713)
    	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
    	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
    	at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:290)
    	at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:139)
    	... 2 more
    Normal Termination
    Output completed (25 sec consumed).

  2. #2
    Guardando nelle api specificano che InvalidClassException viene lanciato in 3 occasioni:

    codice:
    public class InvalidClassException
    extends ObjectStreamException
    
    Thrown when the Serialization runtime detects one of the following problems with a Class.
    
        * The serial version of the class does not match that of the class descriptor read from the stream
        * The class contains unknown datatypes
        * The class does not have an accessible no-arg constructor
    Forse allora è perchè nn ho inserito un costruttore con argomenti vuoti, perchè se lo faccio mi dà errore in compilazione dato che neanche FileReader c'è l'ha....

    Come posso fare?

  3. #3
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    ma ti è proprio necessario serializzare anche il FileReader? Potresti escludere dalla serializzazione specificando l'istanza con transient e dopo aver deserializzato chiamare un metodo che ricrea il FileReader.
    Se invece devi salvare per forza il FileReader e/o ciò che dico non è del tutto giusto, ci penso e vedrò se mi viene in mento qualcosa.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.