[SOLVED] java.lang.RuntimeException: Error deserializing object, class ID:-47

Full stacktrace:

вер. 15, 2019 1:56:59 ПП com.jme3.network.base.DefaultClient handleError
SEVERE: Termining connection due to unhandled error
java.lang.RuntimeException: Error deserializing object, class ID:-47
	at com.jme3.network.base.MessageProtocol.createMessage(MessageProtocol.java:184)
	at com.jme3.network.base.MessageProtocol.addBuffer(MessageProtocol.java:160)
	at com.jme3.network.base.ConnectorAdapter.run(ConnectorAdapter.java:169)
Caused by: java.io.IOException: Could not read String: Invalid length identifier.
	at com.jme3.network.serializing.serializers.StringSerializer.readString(StringSerializer.java:89)
	at com.jme3.network.serializing.serializers.StringSerializer.readObject(StringSerializer.java:97)
	at com.jme3.network.serializing.serializers.StringSerializer.readObject(StringSerializer.java:44)
	at com.jme3.network.serializing.serializers.FieldSerializer.readObject(FieldSerializer.java:161)
	at com.jme3.network.serializing.serializers.ArraySerializer.readArray(ArraySerializer.java:147)
	at com.jme3.network.serializing.serializers.ArraySerializer.readObject(ArraySerializer.java:88)
	at com.jme3.network.serializing.Serializer.readClassAndObject(Serializer.java:405)
	at com.jme3.network.base.MessageProtocol.createMessage(MessageProtocol.java:180)
	... 2 more

вер. 15, 2019 1:57:00 ПП com.jme3.app.LegacyApplication handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
java.lang.IllegalStateException: Client is not started.
	at com.jme3.network.base.DefaultClient.checkRunning(DefaultClient.java:129)
	at com.jme3.network.base.DefaultClient.close(DefaultClient.java:297)
	at main.Test2.destroy(Test2.java:148)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.deinitInThread(LwjglAbstractDisplay.java:198)
	at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:237)
	at java.base/java.lang.Thread.run(Thread.java:834)

Class:

package networking;

import com.jme3.network.AbstractMessage;
import com.jme3.network.serializing.Serializable;

@Serializable
public class HelloMessage extends AbstractMessage {
    private String hello;       // custom message data
    public HelloMessage() {}    // empty constructor
    public HelloMessage(String s) { hello = s; } // custom constructor

    public String getHello() {
        return hello;
    }
}

Class registered in static block:

static {
        Serializer.registerClass(HelloMessage.class);
    }

Message successfully sent to server:
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Problem fixed

You could say how you managed to fix it and mark the topic as solved :wink:

How did you solve that? :smiling_face_with_tear:

Probably upgraded JME.

If you are having the same problem then you should provide more details. This thread was 4 years old which is a long time in “internet time”.

2 Likes

I could handle that by reading other thread. Link. Thanks!

Yes, but the bug that caused the issues in these threads was fixed a long time ago.

…so I wonder if you run an ancient JME.

1 Like

No it’s the latest one. However I copied some code from the Monkey Zone project, where the Util.registerSerializers() method was before the client = Network.createClient() statement :sweat_smile:

Monkey Zone is like a thousand years old.

In modern JME, you only have to register classes on the server.

2 Likes