Я создаю игру в шахматы, и одна из функций, которую я хотел, заключалась в том, что если игра будет закрыта, то в следующий раз, когда она откроется, все будет в том же положении.Проблема, с которой я столкнулся, связана с сериализацией данных и изображений.Я понимаю, что Изображения не реализуют Сериализуемый, поэтому я сделал свой ArrayList of Images и само поле Image кратковременным.Всякий раз, когда я запускаю игру, я получаю 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 и обход этого актива, и все работало нормально.После начальной загрузки с использованием класса Loader программа возвращается к использованию класса Asset.