01. september 2003 - 11:18Der 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 ?
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.
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".
Og et svar hvis du vil give point for det triste svar at du ikke kan gøre det du gerne vil.
Synes godt om
Ny brugerNybegynder
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.