だから私はJMonkeyを使ってネットワーキングプロジェクトをやろうとしていました. ネットワークのチュートリアルに従って、メッセージ (文字列) をクライアントからサーバーに、またはその逆に渡しましたが、問題はありませんでした。しかし、独自のバージョンを作成して Geometry を送信しようとすると、プログラムが停止します。ストリングを送ったときとまったく同じだと思います。
非常によく似た問題があり、クラスをシリアライザーに登録することで明らかに解決した他のいくつかの質問を読んだので、チェックしたところ、私がしていることに問題は見られません。
クラッシュするコードは次のとおりです。
Client myClient;
@Override
public void simpleInitApp() {
try {
myClient = Network.connectToServer("localhost", 6143);
myClient.start();
ClientListener listener = new ClientListener(rootNode);
Serializer.registerClass(HelloMessage.class);
myClient.addMessageListener(listener, HelloMessage.class);
Serializer.registerClass(GeomPos.class);
myClient.addMessageListener(listener, GeomPos.class);
Message message = new HelloMessage("Hello World!");
myClient.send(message);
} catch (IOException ex) {
Logger.getLogger(ClientMain.class.getName()).log(Level.SEVERE, null, ex);
}
flyCam.setEnabled(false);
// You must add a light to make the model visible
DirectionalLight sun = new DirectionalLight();
sun.setDirection(new Vector3f(-0.1f, -0.7f, -1.0f));
rootNode.addLight(sun);
assetManager.registerLocator("town.zip", ZipLocator.class);
Spatial gameLevel = assetManager.loadModel("main.scene");
gameLevel.setLocalTranslation(0, -5.2f, 0);
gameLevel.setLocalScale(2);
rootNode.attachChild(gameLevel);
Box b = new Box(1, 1, 1);
geom = new Geometry("Box", b);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geom.setMaterial(mat);
geom.setLocalTranslation(0.0f, -3.80f, 0.0f);
rootNode.attachChild(geom);
Message msg = new GeomPos(geom);
myClient.send(msg); //This is the line where it crashes<--------------------------
initKeys();
}
最後に、これは GeomPos メッセージ クラスです。
package mygame;
import com.jme3.network.AbstractMessage;
import com.jme3.network.serializing.Serializable;
import com.jme3.scene.Geometry;
@Serializable
public class GeomPos extends AbstractMessage{
private Geometry geom;
public GeomPos() {
}
public GeomPos(Geometry g) {
geom = g;
}
public Geometry getGeometry() {
return geom;
}
}
次のエラーが表示されます。
INFO: Audio max auxilary sends: 4
May 17, 2014 11:50:29 PM com.jme3.app.Application handleError
SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]
java.lang.RuntimeException: Error serializing message