2013-09-23 6 views
1

Java:Graphics2D Невозможно сериализовать

Как я могу сериализовать Graphics2D? Я делаю платформерную игру, и я хочу систему сохранения/загрузки, используя сериализацию.

java.io.NotSerializableException: sun.java2d.SunGraphics2D 

Он печатает это исключение. Есть ли способ иметь сериализованный Graphics2D?

+0

Вы должны сосредоточиться на сохранении состояния, а не объектов, если можете. – MadProgrammer

ответ

5

Нет, экземпляры Graphics2D (и другие классы, относящиеся к графике, звуку или сети) обычно не являются Serializable. Вы должны попытаться отделить данные, которые вам нужно сохранить, от кода, который обрабатывает рендеринг.

Если это невозможно, отметьте поле Graphics2D как transient. Таким образом, система сериализации будет пропускать поле Graphics2D при его сохранении. После загрузки вы можете просто установить поле Graphics2D новым экземпляром, который вы создаете вручную.

+0

Где я могу поставить переход? Before to = he – PQx

+0

Вы помещаете 'transient' в определение поля типа' Graphics2D' в классе, который вы сериализуете. – maksimov

+0

частной недействительными инициализации() { \t \t \t \t изображения = новый BufferedImage ( \t \t \t \t \t ширина, высота, \t \t \t \t \t BufferedImage.TYPE_INT_RGB \t \t \t \t); \t \t g = (Graphics2D) image.getGraphics(); \t \t \t \t running = true; \t \t \t \t rms = new RoomManager (this); \t \t \t} \t \t Это дает ошибку, говоря, изображение не seralizable. Я отметил его как переходный ... – PQx

0

Вы пытались использовать createGraphics() вместо getGraphics()? getGraphics() поддерживается для обратной совместимости, но его использование не рекомендуется

Смежные вопросы