Networking communication

I’m trying to implement the server client connection. The connection establishes fine, but I can’t send messages.

Referring to the documentation,



[java] Serializer.registerClass(PositionData.class); [/java]



gives me errors.



java.lang.RuntimeException: Registration error: no-argument constructor not found on:class mygame.Main$PD

at com.jme3.network.serializing.serializers.FieldSerializer.checkClass(FieldSerializer.java:59)

at com.jme3.network.serializing.serializers.FieldSerializer.initialize(FieldSerializer.java:65)

at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:175)

at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:141)



Anyone knows why? OR has an example of networking code working fine?

Network serialized classes have to have a no argument constructor.



It’s your PD class that is in error so you must have an inner class… in which case it must be static and it must have a no-arg constructor.

Sorry, the PD class and the PositionData class are the same, I changed the names later and mixed up the errors.

The class DOES contain a no-arg constructor.





[java] @Serializable

public class PositionData extends AbstractMessage {

private String LR; // custom message data

public PositionData(){} // empty constructor

public PositionData(String s1) { LR = s1;}

public String getLR() { return LR;}



} [/java]



[java] Serializer.registerClass(PositionData.class); [/java]





java.lang.RuntimeException: Registration error: no-argument constructor not found on:class mygame.Main$PositionData

at com.jme3.network.serializing.serializers.FieldSerializer.checkClass(FieldSerializer.java:59)

at com.jme3.network.serializing.serializers.FieldSerializer.initialize(FieldSerializer.java:65)

at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:175)

at com.jme3.network.serializing.Serializer.registerClass(Serializer.java:141)

@pspeed said:
in which case it must be static and it must have a no-arg constructor.


Inner classes that are not static cannot be instantiated directly. They can only be instantiated in context of an instance of the outer class... so the serializer can't do it.

Got it! Thanks a bunch!