暂态属性

时间:2018-11-18 19:22:13

标签: java image transient

我正在创建一个国际象棋游戏,我想要的功能之一是,如果该游戏关闭,则下次打开该游戏时,所有内容都将位于相同的位置。我遇到的问题是数据和图像的序列化。我知道映像不能实现Serializable,因此我将映像的ArrayList和映像字段本身设为瞬态。每当我运行游戏时,我都会收到NullPointerExceptionError声明从未加载图像。我知道瞬态会阻止它们被序列化,但是我仍然希望将图像加载到游戏中,并且我很难完成此操作。

资产类别:

public class Asset {
private transient ArrayList<Image> assets;

public Asset() {
    assets = new ArrayList<Image>(13);
    loadImages();
}

private void loadImages() {
    assets.add(Loader.loadImage("/White/WhitePawn.png"));           //Index 0
... removed code...
}

董事会课程我遇到了以下问题:

public class Board implements Serializable{
private static final long serialVersionUID = 6818852943765948280L;
... removed code...
private final transient Asset assets;

我要加载的实际对象:

public abstract class Piece extends Entity{
private static final long serialVersionUID = -535748959779200884L;

/**
 * Images are used to render the graphical representation 
 * of the Piece. The Image is used in conjunction with the
 * overridden render method.
 */
private transient Image image;

private int offsetX;

private int offsetY;

private boolean canMoveOnCheck = false;
/**
 * A Blank Piece is created with default values.
 */
public Piece() {
    super();
}
/**
 * Constructor of Piece with normal variables.
 * @param x the X location of Piece
 * @param y the Y location of Piece
 * @param width the Width of Piece
 * @param height the Height of Piece
 * @param type the Type of Piece
 * @param image the Image of Piece
 * 
 * @throws IllegalFormatException when width or height are less than 0
 */
public Piece(int x, int y, int width, int height, Type type, Image image) {
    super(x, y, width, height, type);
    this.image = image;
}

编辑:好的,所以我只是搞乱了图像加载,以了解为什么它不起作用,我知道了。因此,当我使用Asset类一次加载所有图像并存储它们时,效果很好。问题是,当我序列化数据时,不会首先创建资产。我所做的就是直接访问Loader类,并绕开了Asset,一切正常。在使用Loader类进行初始加载之后,程序将返回到使用Asset类。

0 个答案:

没有答案