JavaのInvalidDefinitionExceptionジャクソンデータバインドを使用してオブジェクトをシリアライズするとき

ケビンTinnemans:

私はジャクソンからObjectMapperを使用して文字列として、次Playerオブジェクトを作成しようとしています。

package models.Game;

import models.Game.Enums.SnowballState;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

import java.util.ArrayList;
import java.util.List;

public class Player {
    private Circle circle;
    private String name;
    private Color color;
    private int points = 0;
public int getLives() {
    return lives;
}

private int lives = 3;
private List<Snowball> snowballs;
private Circle oldCircle;
private int stepSize = 10;

public Player(String name, Color color) {
    this.name = name;
    circle = new Circle();
    oldCircle = new Circle();
    this.color = color;
    snowballs = new ArrayList<>();
    snowballs.add(new Snowball(this));
    snowballs.add(new Snowball(this));
    snowballs.add(new Snowball(this));
}

public Player() {

}

private void removeLife() {
    this.lives--;
}

public int getHit() {
    removeLife();
    return getLives();
}

public int shotSuccess() {
    points+= 50;
    return points;
}

public int getSnowballAmount() {
    int balls = 0;
    for (Snowball ball : snowballs) {
        if (ball.getState() == SnowballState.CREATED) {
            balls++;
        }
    }
    return balls;
}

public List<Snowball> getSnowballs() {
    return snowballs;
}

public Snowball getNextSnowball() {
    for (Snowball ball : snowballs) {
        if (ball.getState() == SnowballState.CREATED) {
            return ball;
        }
    }
    return null;
}

public void createSnowball() {
    if (getSnowballAmount() < 3) {
        snowballs.add(new Snowball(this));
    }
}

public Color getColor() {
    return this.color;
}

public Circle getCircle() {
    return this.circle;
}

public void moveLeft() {
    saveOld();
    circle.setTranslateX(circle.getTranslateX() - stepSize);
}

public void moveRight() {
    saveOld();
    circle.setTranslateX(circle.getTranslateX() + stepSize);
}

public void moveUp() {
    saveOld();
    circle.setTranslateY(circle.getTranslateY() - stepSize);
}

public void moveDown() {
    saveOld();
    circle.setTranslateY(circle.getTranslateY() + stepSize);
}

public void undo() {
    circle.setTranslateX(oldCircle.getTranslateX());
    circle.setTranslateY(oldCircle.getTranslateY());
}

private void saveOld() {
    oldCircle.setTranslateX(circle.getTranslateX());
    oldCircle.setTranslateY(circle.getTranslateY());
}

public Snowball shootSnowball(Snowball ball, double mouseX, double mouseY) {

    double polarDirection = Math.atan2(mouseY - circle.getTranslateY(), mouseX - circle.getTranslateX() + 50);
    ball.setState(SnowballState.ALIVE);
    ball.setDirection(polarDirection);
    ball.getCircle().setTranslateX(circle.getTranslateX() + 50);
    ball.getCircle().setTranslateY(circle.getTranslateY());
    return ball;
}

私はこれを行うには、次のコマンドを使用しています:

 String json = null;
        try {
            json = objectMapper.writeValueAsString(instanceOfPlayerClass);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

残念ながら私は、次の関連するエラーメッセージを取得しています:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException:タイプに対して無効な型定義com.sun.javafx.scene.NodeEventDispatcher:(java.lang.reflect.InaccessibleObjectException)できませんでした:[単純型、クラスcom.sun.javafx.scene.NodeEventDispatcher]のためのBeanSerializerの構築に失敗しましたモジュールjavafx.baseモジュールcom.fasterxml.jacksonにない「輸出com.sun.javafx.event」を行います。公共最終com.sun.javafx.event.BasicEventDispatcher com.sun.javafx.event.BasicEventDispatcher.getPreviousDispatcher()にアクセスが作ります.databind(参照チェーンを介し:models.communication.Websockets.ConnectionSubmitModel [ "プレーヤー"] - > models.Game.Player [ "円"] - > javafx.scene.shape.Circle [ "親"] - > javafx.scene .layout.GridPane [ "親"] - > javafx.scene.layout.AnchorPane [ "のEventDispatcher"])

エラーが言うようにそれは、JavaFXのは、特定の依存関係をエクスポートしていないとは何かを持っているが、私はJavaFXの制御にはいないよので、私は本当にわからこれを修正する方法についてはありませんよ。

john16384:

あなたは、保存しようとしているCircle(半径、厚さ、色、塗りつぶし、境界線などのような)多くのプロパティで、実際にデータのクラスではないのJavaFXクラスでクラスを、(それがUI要素です)。そのようなものとして、それはさまざまな方法でのJavaFXシステムで結ばれ、よく保存されることはありません。

代わりに、ちょうどあなたが作成するのに必要な情報があるあなた自身の単純なクラスにしたい情報、保存Circleあなたが戻ってそれを読んだときにオブジェクトを再び。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=179914&siteId=1