Yeah I get the same problem with ArrayList’s.
I should have mentioned that the server starts normally and it’s the client that throws the NPE.
I am unable to attach the modified versions of the JGN test classes that recreate the problem. Below is the code. Modified lines are marked with //Spodrum. Its pretty straight forward though.
MySharedBean.java:
public interface MySharedBean {
public String getOne();
public void setOne(String one);
public int getTwo();
public void setTwo(int two);
public String getSelectedlevel();
public void setSelectedlevel(String level);
public ArrayList getList(); //Spodrum
public void setList(ArrayList list); //Spodrum
}
BasicSharedObjectServer.java
public class BasicSharedObjectServer {
public static void main(String[] args) throws Exception {
JGN.register(ArrayList.class); //Spodrum
InetSocketAddress server1Address = new InetSocketAddress(InetAddress.getLocalHost(), 1000);
// Create the server
MessageServer server = new TCPMessageServer(server1Address);
//server.addMessageListener(new DebugListener("Server"));
// Create a single thread managing updates for the server and the SharedObjectManager
JGN.createThread(server, SharedObjectManager.getInstance()).start();
// Add a listener to see changes
SharedObjectManager.getInstance().addListener(new SharedObjectListener() {
public void changed(String name, Object object, String field, MessageClient client) {
System.out.println("Changed: " + name + ", " + object + ", " + field + ", " + client);
}
public void created(String name, Object object, MessageClient client) {
System.out.println("Created: " + name + ", " + object + ", " + client);
}
public void removed(String name, Object object, MessageClient client) {
System.out.println("Removed: " + name + ", " + object + ", " + client);
}
});
// Create our shared bean
MySharedBean bean = SharedObjectManager.getInstance().createSharedBean("MyBean", MySharedBean.class);
// Set a value that should be sent
bean.setOne("This is set right after the bean was created");
bean.setSelectedlevel("Test");
ArrayList list = new ArrayList(); //Spodrum
list.add("Test"); //Spodrum
bean.setList(list); //Spodrum
//bean.getVector().add("Test2");
// Enable sharing on the server so it can comprehend events
SharedObjectManager.getInstance().enable(server);
// Register it in the server so changes get broadcast to all connections when changes are made
SharedObjectManager.getInstance().addShare(bean, server);
}
BasicSharedObjectClient.java:
public class BasicSharedObjectClient {
public static void main(String[] args) throws Exception {
JGN.register(ArrayList.class); //Spodrum
// Create the server
MessageServer server = new TCPMessageServer(new InetSocketAddress(InetAddress.getLocalHost(), 2000));
//server.addMessageListener(new DebugListener("Client"));
// Create a single thread managing updates for the server and the SharedObjectManager
JGN.createThread(server, SharedObjectManager.getInstance()).start();
// Add a listener to see changes
SharedObjectManager.getInstance().addListener(new SharedObjectListener() {
public void changed(String name, Object object, String field, MessageClient client) {
System.out.println("Changed: " + name + ", " + object + ", " + field + ", " + client);
}
public void created(String name, Object object, MessageClient client) {
System.out.println("Created: " + name + ", " + object + ", " + client);
}
public void removed(String name, Object object, MessageClient client) {
System.out.println("Removed: " + name + ", " + object + ", " + client);
}
});
// Enable sharing on the server so it can comprehend events
SharedObjectManager.getInstance().enable(server);
// Connect to the server
MessageClient client = server.connectAndWait(new InetSocketAddress(InetAddress.getLocalHost(), 1000), 5000);
if (client != null) {
System.out.println("Connected!");
Thread.sleep(5000);
MySharedBean bean = (MySharedBean)SharedObjectManager.getInstance().getObject("MyBean");
System.out.println("Remote Bean Value: " + bean.getOne());
bean.setTwo(53);
} else {
System.out.println("Unable to connect!");
}
}
}
I also found
http://forum.captiveimagination.com/index.php/topic,268.15.html It looked like a similar issue but didn’t seem to have been resolved. Perhaps forgotten once ScarFreewill’s project moved on.