java.io.NotSerializableException Issue


Question

I am trying to send the following but I get the following error below. TableUser implements serializable but it seems that the issue is the the FXCollections, but I don't know how to serialize that.

Here is the TableUser class.

package application;

import java.io.Serializable;


public class TableUser implements Serializable{

    private static final long serialVersionUID = 1L;
    private String username = "";

    public TableUser(String name) {
        this.username = name;
    }

    public String getUsername(){
        return username;
    }

    public void setUsername(String user){
        username = user;
    }

}






//NOT apart of TableUser - This is the code that isn't working
private static ObservableList<TableUser> clientList = FXCollections.observableArrayList(); 

Object[] data = new Object[2];
        data[0] = "CLIENTS";
        data[1] = clientList;

        for(int i = 0; i < clients.size(); i++){
            clients.get(i).sendData(data);
        }


//I don't know if this helps but here is the sendData method
protected void sendData(Object[] data){
        try {
            oos.writeObject(data); //ServerMultiClient.java:286
            oos.reset();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


//This is from the Client application that is also part of the issue
if((fromServer = (Object[]) ois.readObject()) != null){ //Controller.java:109


java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: com.sun.javafx.collections.ObservableListWrapper
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readArray(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at application.ChatRoomController$2.run(Controller.java:109)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.io.NotSerializableException: com.sun.javafx.collections.ObservableListWrapper
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeArray(Unknown Source)
    at java.io.ObjectOutputStream.writeObject0(Unknown Source)
    at java.io.ObjectOutputStream.writeObject(Unknown Source)
    at application.ServerMultiClient.sendData(ServerMultiClient.java:286)
    at application.ServerMultiClient.run(ServerMultiClient.java:236)
1
2
1/9/2014 1:01:47 AM

Accepted Answer

Given that ObservableListWrapper is not serializable you could try looping through your TableUser objects, and adding them one by one to data

Something like this:

Object[] data = new Object[clientList.size()+1];
data[0] = "CLIENTS";
int counter = 1;
for(TableUser tu: clientList) {
    data[counter] = tu;
    counter++;
}
1
1/9/2014 1:55:06 AM

A NotSerializableException is thrown when an object that is trying to be serialized has not implemented the Serializable class. In your case, since it is telling you that ObservableListWrapper is not serializable, I would infer that clientList is not serializable.

Instead of using a JavaFX ObservableList, you can use a list, such as java.util.ArrayList, which happens to implement Serializable.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon