Avatar billede etif Nybegynder
01. september 2003 - 11:18 Der er 6 kommentarer og
1 løsning

Local class incompatible

Jeg har lavet en klasse (TopFrame) som extend'er JFrame, for at give mulighed for at lave "allways on top"  dialog boxe i en applet.

For at få adgang til klassen kalder appletten en servlet som så returnerer et objekt af typen TopFrame.

Men når jeg i apletten forsøger at pakken objektet ud af responset fra servlettten får jeg følgende fejlmeddelelse:
java.io.InvalidClassException: javax.swing.JFrame; local class incompatible: stream classdesc serialVersionUID = 9196843821942654843, local class serialVersionUID = -3362141868504252139

    at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:454)

    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1511)

    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1425)

    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1511)

    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1425)

    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1616)

    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1264)

    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:322)

    at tm.DialogBox.getFrame(DialogBox.java:321)

    at tm.DialogBox.askQuestion(DialogBox.java:65)

    at tm.DialogBox.main(DialogBox.java:528)

Jeg får denne fejl uanset om jeg manuelt eller automatisk serialiserer TopFrame-objektet.

Jeg kører på en webserver (Apache), som er installeret på den maskine som både applet og servlet er compileret på.

Ved hjælp af serialver har jeg konstateret at 9196843821942654843 er JFrame's serialversionUID, hvad er den anden serialversionUID for en, og hvordan undgår jeg at få denne fejl ?
Avatar billede arne_v Ekspert
01. september 2003 - 11:51 #1
Hvorfor gør du ikke som man normalt gør og lader appletten hente
.class filen direkte fra web serveren i.s.f. noget OnjectInputStream
til en servlet ?
Avatar billede etif Nybegynder
01. september 2003 - 12:26 #2
Det gjorde jeg også i starten, men da klassen kalder loadlibray og senere nogle metoder i en dll, gav det to problemer:
1. Dll'en skal installeres på klient-maskinen.
2. Der skal laves en policy.fil for at give appletten adgang til at kalde den.

I produktion vil applet og servlet ikke være på samme maskine og jeg har uden problemer anvendt objectInputStream til overførsel af andre object'er tidligere i det aktuelle projekt.
Avatar billede arne_v Ekspert
01. september 2003 - 13:19 #3
ObjectInputStream er helt fin til at overføre objekter med.

Men jeg kan stadig ikke se pointen i at hente en klasse på den
måde.

Du får da ikke flere rettigheder til at køre DLL på den måde ??
Avatar billede etif Nybegynder
01. september 2003 - 13:43 #4
Jeg har vist ikke forklaret mig særligt godt.Det jeg gør, er at jeg overfører et objekt af typen TopFrame efter at jeg har lavet kaldene til loadlibrary og metoderne i dll'en. Det foregår nemlig i contructor'en til klassen.

Det objekt jeg får tilbage anvendes så som en JFrame, men med den ekstra egenskab at det er "allways on top".
Avatar billede arne_v Ekspert
01. september 2003 - 20:19 #5
Det tror jeg aldrig kommer til at virke.

Det JNI fifleri du har lavet på server kan ikke overføres til client.
Avatar billede arne_v Ekspert
10. september 2003 - 21:51 #6
Tid at lukke spørgsmålet ?
Avatar billede arne_v Ekspert
10. september 2003 - 21:52 #7
Og et svar hvis du vil give point for det triste svar at du ikke
kan gøre det du gerne vil.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

NOVAX A/S

QA Consultant

BEC Financial Technologies

Java software engineer (regular)

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Senior Platform Engineer

Netcompany A/S

Managing Architect