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)
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++;
}
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
.