|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
||||||
Serializable не сериализуется16.06.2013, 04:57. Показов 3551. Ответов 31
Метки нет (Все метки)
Всем привет. Пытаюсь реализовать в игре функции "save game" и "load game". Пока в простом окошке хочу сделать так, чтобы оно при нажатии "save" запоминало своё состояние (цвет), а потом при вызове "load" вызывало (перекрашивало себя) в запомненное состояние. Сейчас при нажатии на "save" возникает java.io.NotSerializableException. Но я ведь объявил класс сериализуемым. Подскажите пожалуйста что не так делаю.
Кликните здесь для просмотра всего текста
0
|
||||||
| 16.06.2013, 04:57 | |
|
Ответы с готовыми решениями:
31
Для чего написано: import java.io.Serializable; public class person implements Serializable?
|
|
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
|
||||||||||||
| 19.06.2013, 16:03 | ||||||||||||
|
Провел тест и вправду по производительности разницы нету и занимает одинаковое кол-во памяти ...
Вот тест ) (лучше не заглядовать)) Кликните здесь для просмотра всего текста
Добавлено через 8 минут но вот в исходах Stringа .
0
|
||||||||||||
|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
||||||
| 19.06.2013, 20:59 [ТС] | ||||||
|
А с моим вопросом кто нибудь поможет? Никак не разберусь почему Observer больше не наблюдает за моделью. И если той же JPanel ещё и MausListener назначаю, то он тоже после сериализации "слетает".
из предыдущего поста
если я в метод loadGame() вставляю вот эти строки
, то после вызова метода loadGame, цвет панели всё также меняется, но кнопки смены цвета перестают реагировать на новую панель. Т.е. выглядит так, как будто она больше не является Observer для класса GameInterface (который в свою очередь Observable конечно), хотя она и было зарегистрирована (строка 96: giObj.addObserver(gfObj)) у этого класса ещё до сериализации. В чём же тут дело?[/QUOTE] Добавлено через 42 минуты вот нашёл что-то похожее в сети. Решение здесь предлагается следующее "соорудить свои Observable implements Serializable; Observer и юзать их" Задача у меня такая же, как у того ТС из ссылки: "Хотелось сделать прогу в соответствии с MVC, т.е. чтобы классы данных были Observable. А как раз эти классы и нужнаются в сериализации." И что? Значит теперь отказываться от MVC? А что, если игра уже написана по принципу MVC и теперь нужно только реализовать/добавить в ней функции "save и load" использующие механизм сериализации? Всё заново переписывать? Должен же быть какой-то выход? То предлагаемое решение для меня вообще тёмный лес.
0
|
||||||
|
|
||
| 20.06.2013, 03:13 | ||
|
представьте себе 3 проперти в объекте и он сериализован, вы обновляете игру на новую версию, а там уже 4 проперти в нём же. Ну и как вы представляете в таком случае десереализацию этого класса? Должен быть отдельный класс инициализирующий все действующие объекты и запускающий игру на старт, если обьектов нет инит дефолт значением. Для этого понадобится хранить свои параметры в хешмапе ключ-значение и какнибудь пошифровав уже этот хешмап сериализовать. Тогда проблем с десериализацией не будет никогда. Если же игру невозможно запустить с любой точки наполнив её параметрами - значит она неправильно спроектирована.
0
|
||
|
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
|
||
| 21.06.2013, 10:50 | ||
|
Добавлено через 1 минуту ЗЫ а так конечно все Обертки и Объекты нуно сравнивать через метод эквивалентности...
0
|
||
|
|
|||
| 21.06.2013, 10:59 | |||
|
0
|
|||
|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
|
| 23.06.2013, 02:37 [ТС] | |
|
Товарищи, моя борьба с сериализацией продолжается. С комментариями и благодарностями mutagen-у и AckiyBolt-у потом отпишусь. Сейчас у меня возникла следующая проблема. Я сериализую объекты в файл, потом десериализую их и использую, но если я пытаюсь десериализовать их снова, то возникает end of file exception. Skipy в какой-то из тем на форуме не двусмысленно намекнул, что указатель или маркер находится уже в конце файла, что и приводит к этому исключению. Правда не сказал как этого избежать. Вопрос - как установить маркер на интересующую меня позицию?
p.s. Использую FileInputStream . Где-то вычитал, что он не маркируемый.
0
|
|
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
||
| 24.06.2013, 11:02 | ||
|
Может, Вы все-таки приведете код, который пишет в файл, и код, который из него читает? Или мы должны на хрустальном шаре гадать, что Вы не так сделали?
0
|
||
|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
|||||||||||||||||||||
| 26.06.2013, 19:28 [ТС] | |||||||||||||||||||||
|
Skipy Я читал, но про установку маркера не нашёл. К тому же, если бы прочитанное было бы мною однозначно понято, то я бы и не стал здесь спрашивать. Просто надеюсь на опыт экспертов, которые на пальцах могут объяснить что к чему, когда задаю здесь вопрос теоретического характера.
Игру переписал. endoffile обработал. Теперь появляется ClassCastException. метод undo() из контроллера (MVC)
часть кода из модели (MVC)
класс сериализующий модель
Не пойму почему он ругается именно на getGamerXpos(). Ведь он возвращает int, а в исключении Ljava.lang.String; написано. Какой String он имеет в виду.. Добавлено через 2 часа 50 минут Интересно то, что сначала метод undo() у меня выглядел так
и десериализация получалась. Но игрок не двигался по полю. Стало понятно, что он не двигается потому, что игре не известны его координаты, которые я и добавил используя методы getGamerXpos getGamerYpos. И всё, больше никаких изменений не делал. Но теперь, даже возвращая всё к прежней записи, опять то же самое исключение. Может что-то с serialVersionUID не так? Я его сначала вообще не вписывал.
0
|
|||||||||||||||||||||
|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
|||
| 05.07.2013, 00:44 [ТС] | |||
|
Извиняюсь за панику на борту. На самом деле с сериализацией было всё нормально. Просто забыл одну строчку в коде исправить после копипаста, когда экспериментировал с сериализацией. Всем спасибо за помощь. Сообщения давшие мне важное понимание или приблизившие меня к цели пометил плюсиком)
Исходники выложил сюда Тем, кто возьмётся просмотреть код, буду благодарен за комментарии, наставления, поправки, критику. Можно в личку.
0
|
|||
|
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
|
|||
| 05.07.2013, 11:07 | |||
Не по теме: Я недавно тоже на эти грабли наступил - в методе записи пропустил одно поле, а при чтении его считал. Естественно, получил EOF. Удивился, полез в код, поправил - всё, EOF пропал.
0
|
|||
|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
||
| 05.07.2013, 23:41 [ТС] | ||
|
Больше комментировать нечего. Спасибо за ещё одно объяснение. Раз я всё-таки реализовал в игре функции сохранения и записи, значит я всё понял) Пойду подкорректирую код, чтобы можно было несколько шагов назад возвращать. Ещё раз всем спасибо)
0
|
||
| 05.07.2013, 23:41 | |
|
WCF. System.Data.SqlTypes.SqlString не сериализуется? Переменная скрипта сериализуется в файл, но не десериализуется обратно Serializable О Serializable Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача
Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
Сигнатура
func Fetch(urls string, maxConcurrent int) Result
Пример
urls :=. . .
|
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition)
Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
|
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
|
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool
Worker Pool — паттерн конкурентной обработки задач в Go.
Суть: фиксированное количество горутин-воркеров читают задачи из общего канала
и пишут результаты в общий канал результатов. . . .
|
|
[golang] Pipeline
alhaos 08.06.2026
Pipeline
Pipeline — паттерн конкурентной обработки данных в Go.
Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
|
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь
lIs4oanZS9Y
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|