|
3 / 3 / 2
Регистрация: 04.01.2013
Сообщений: 73
|
||||||
Serializable не сериализуется16.06.2013, 04:57. Показов 3444. Ответов 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 | |
|
Помогаю со студенческими работами здесь
32
WCF. System.Data.SqlTypes.SqlString не сериализуется? Переменная скрипта сериализуется в файл, но не десериализуется обратно Serializable О Serializable Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|