Avatar
marek.zimic
Člen
Avatar
marek.zimic:

Mám aplikaci na evidenci, ukládání do streamů, JTable, prostě přidám v aplikaci nějaký objekt, ukáže se v tabulce, jakmile aplikaci znovu zavřu a otevřu tak tam furt je a je uložen.

Konkrétně třídu a jejího potomka. Potřebuju aby ten potomek implementoval Serializable. Na to mi bylo napsáno, že constructor is not valid a abych přidal defaultní konstruktor pro předka i potomka, to jsem udělal a teď mi to vypisuje chybu s ID:

CHYBA: Nelze načíst soubor. logika.Absolvent; local class incompatible: stream classdesc serialVersionUID = -3143379283109­629711, local class serialVersionUID = 6529685098267757690

Hledal jsem, ale řešení jsem moc nepochopil, budu rád za každou podrobně rozepsanou pomoc. :-)

 
Odpovědět 10.6.2014 15:21
Avatar
Odpovídá na marek.zimic
Luboš Běhounek (Satik):

Uložil jsi třídu v jedné verzi a snažíš se ji načíst v jiné, při každé změně struktury třídy se to ID přegeneruje, pokud ho nemáš nastavené manuálně.

Manuálně ho můžeš nastavit tak, že do třídy přidáš

static final long serialVersionUID = 1L;
Nahoru Odpovědět 10.6.2014 15:28
:)
Avatar
marek.zimic
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
marek.zimic:

a kam všude mám dopsat tenhle atribut ID?

 
Nahoru Odpovědět 10.6.2014 15:54
Avatar
Odpovídá na marek.zimic
Luboš Běhounek (Satik):

Jen jako člena té třídy, kterou serializuješ.

Nahoru Odpovědět 10.6.2014 15:56
:)
Avatar
marek.zimic
Člen
Avatar
Odpovídá na Luboš Běhounek (Satik)
marek.zimic:

To jsem udělal, vyhazuje to stejnou chybu...

 
Nahoru Odpovědět 10.6.2014 16:08
Avatar
marek.zimic
Člen
Avatar
marek.zimic:

teda stejnou ne, tuhle:
logika.Absolvent; local class incompatible: stream classdesc serialVersionUID = -3143379283109­629711, local class serialVersionUID = 1

 
Nahoru Odpovědět 10.6.2014 16:10
Avatar
Odpovídá na marek.zimic
Luboš Běhounek (Satik):

Však se snažíš se deserializovat něco, co jsi předtím serializoval bez udané verze (takže se tam automaticky vygenerovalo číslo verze: -3143379283109­629711), ale tvoje třída nyní má verzi 1.

Otevírat můžeš jen to, co jsi uložil stejnou verzí.

Nahoru Odpovědět 10.6.2014 16:25
:)
Avatar
marek.zimic
Člen
Avatar
marek.zimic:

Díky, ale na mě musíš asi pomalu... přidal jsem atribut, jak jsi řekl. Vyhazuje to, co jsem sem napsal. Nechápu další krok.

 
Nahoru Odpovědět 10.6.2014 16:45
Avatar
Odpovídá na marek.zimic
Luboš Běhounek (Satik):

To co jsi uložil předtím ve verzi -3143379283109­629711, teď prostě neotevřeš, protože je to v souboru označené jako verze -3143379283109­629711, ale napsáním toho ID jsi té třídě řekl, že umí otevírat jen verzi 1.

Řešením je teď po označení za verzi 1 ty data vytvořit a uložit znovu a pak už ti to půjde otevřít, dokud to číslo verze nezměníš nebo dokud nezměníš strukturu třídy takovým způsobem, který by to naboural.

Případně to ID změň na to -3143379283109629711 a otevřeš i ty staré soubory, pokud ti nevadí tam mít takovéhle hausnumero :)

Editováno 10.6.2014 17:03
Nahoru Odpovědět 10.6.2014 17:02
:)
Avatar
marek.zimic
Člen
Avatar
marek.zimic:

Super, pochopil jsem. Díky moc :-)

 
Nahoru Odpovědět 10.6.2014 17:08
Avatar
marek.zimic
Člen
Avatar
marek.zimic:

Ještě bych měl dotaz... když mám takhle nastavený ID, tak se mi v pořádku ukládaj ty objekty, všechno se mi zobrazuje v JTable. Jenže se mi nějaký atributy z těch objektů, který mám v tabulce zobrazujou špatně, resp. mi je to nevrací vůbec a dává tam nějakou defaultní hodnotu. Vypadá to tak, že přidám nějakou osobu do seznamu a prostě všechny mají stejné jméno i příjmení. Jakmile odstraním to ukládání, atribut ID, tak vše funguje jak má.

 
Nahoru Odpovědět 11.6.2014 15:11
Avatar
Odpovídá na marek.zimic
Luboš Běhounek (Satik):

Takhle bez kódu mě teď nic nenapadá - zkus to sem hodit :)

Editováno 11.6.2014 15:16
Nahoru Odpovědět 11.6.2014 15:16
:)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.