PDA

View Full Version : [JAVA] classe non serializzabile


m0linas
18-10-2010, 13:33
Scusate, ho una domanda veloce da farvi....Perchè ottengo una NotSerializableException quando provo a trasferire una arraylist di oggetti della seguente classe da un server a un client??
Per quanto avevo capito, credevo bastasse implementare serializable....

import java.net.*;
import java.io.Serializable;

public class P2PFile implements Serializable
{
private static final long SerialVersionUID = 1L;
private String nome;
private InetAddress owner;

public P2PFile(String nome, InetAddress ip)
{
this.nome=nome;
this.owner=ip;
}

public InetAddress getOwner()
{
return owner;
}

public String toString()
{
return nome;
}
}

Questo è l'errore:


java.io.NotSerializableException: P2PFile
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at P2PThread.run(P2PThread.java:67)
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: P2PFile
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1333)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at P2PClient.run(P2PClient.java:68)
Caused by: java.io.NotSerializableException: P2PFile
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at P2PThread.run(P2PThread.java:67)

e questo il pezzo di codice dove prendo gli elementi uno ad uno e li invio:

ObjectOutputStream outLista = new ObjectOutputStream(soc.getOutputStream());
for (int i=0;i<P2PServer.filesArray.size();i++)
{
P2PFile f = P2PServer.filesArray.get(i);
outLista.writeObject(f);
}
outLista.close();
soc.close();

Grazie in anticipo a chi mi chiarirà le idee :fagiano:

ally
19-10-2010, 10:54
...nella mia immensa ignoranza direi che forse InetAddress non è serializzabile?...

m0linas
19-10-2010, 11:55
...nella mia immensa ignoranza direi che forse InetAddress non è serializzabile?...

Eh...ci avevo pensato anche io, però dalla documentazione...


public class InetAddress
extends Object
implements Serializable

:(
:muro:

vladix
20-10-2010, 09:42
cosi a occhio direi di provare a ricompillare ( lo so ... lo hai già fatto :p )
io ho provato il codice che hai postato e non mi da nessun tipo di errore.
molto probabilmente gli oggetti P2PFile che popolano la lista P2PServer.filesArray non sono serializzabili

cmq prova a postare + codice

m0linas
21-10-2010, 17:14
cosi a occhio direi di provare a ricompillare ( lo so ... lo hai già fatto :p )
io ho provato il codice che hai postato e non mi da nessun tipo di errore.
molto probabilmente gli oggetti P2PFile che popolano la lista P2PServer.filesArray non sono serializzabili

cmq prova a postare + codice

Allora guarda....ieri ho finalmente risolto con un metodo molto scientifico e razionale.....
Ho cancellato la classe P2PFile, e ne ho riscritta un'altra con solo la variabile String, e la serializzava.
Quindi ho aggiunto anche il campo InetAddress ip, e la serializzava.
Quindi ho aggiunto tutti gli altri metodi, e ho così ottenuto una classe uguale identica a P2PFile ma con un altro nome....e la serializza!
Non so per quale arcano motivo continuava a darmi quell'errore, comunque ora è risolto.
Mistero della fede....:boh:
Grazie comunque per l'aiuto, ciao ciao!