Avatar billede di8leva Nybegynder
12. november 2002 - 10:37 Der er 10 kommentarer og
3 løsninger

Classloader

Jag behøver en classloader som skall hente alla filer som skall bruges fra en .CAB-fil, men jag hved ikke hvordan en classloader skall se ud.

hvis någon hved får ni gærna post:a lite source-kode...
Avatar billede carstenknudsen Nybegynder
12. november 2002 - 10:42 #1
Hvis du skal hente klasser ind under runtime,
kan du gøre det som følger:
Class c = Class.forName("nameOfClass");
Object o = c.newInstance();
Det kræver dog at der findes en tom konstruktor?
Alternativt kan du bruge URLClassLoader klassen,
der bare skal have en array af URL'ere hvorfra
klasserne skal loades, URL'erne kan i dit tilfælde
formentlig bare referere til direktorier i
filsystemet.
PS Hvad er en .CAB fil? Hvad ligger i den og
i hvilket format?
Avatar billede carstenknudsen Nybegynder
12. november 2002 - 10:48 #2
For hver fil kan du gøre sådan her
(du kan naturligvis genbruge den samme
ClassLoader):
File file = new File( "/home/me/myclassesarehere" );
//eller File file = new File( "c:\\home\\me\\myclassesarehere" );
URL url = file.toURL();       
URL[] urls = new URL[] { url };
ClassLoader cl = new URLClassLoader( urls );
Class c = cl.loadClass("MyClass");
Object o = c.newInstance();
Avatar billede di8leva Nybegynder
12. november 2002 - 10:53 #3
nå...
jag har en signed .CAB fil med 500 klasser...
haf vill ikke bruge Microsoft VM med sun:s java kan ikke bruge signed .CAB-filer. Så jag er nødt till att lave en signed JAR som bara indeholder en classloader som skall ladda alle mine klasser fra .CAB-filen. Derfor behøver jag vide hur en classloader skall laves =)
Avatar billede carstenknudsen Nybegynder
12. november 2002 - 11:13 #4
Jeg er stadig lidt forvirret. Har du nu en
jar fil, hvor alle filerne ligger? eller
er det den du skal have lavet?
Avatar billede di8leva Nybegynder
12. november 2002 - 11:39 #5
ok.... det hænger lidt ihop med spørgsmål http://www.eksperten.dk/spm/282014.
jag har en signed JAR, men den brokker sig.

det løser sig hvis jag byter JAR mot att bruge en CAB fil, men det er bara Microsoft VM som kan bruge en CAB og jag vill bruge Sun:s VM. Derav ett problem.

Men man kan placera alla filer i en CAB fil og sedan skapa en liten JAR-fil som kun indeholder en classloader som laddar alla filer fra CAB-filen...
Avatar billede carstenknudsen Nybegynder
12. november 2002 - 11:43 #6
Du bliver altså nødt til at fortælle hvad det her
CAB format er. Det er i princippet let nok at
lave en classloader, men man skal jo vide hvilket
format det er den skal læse.
Avatar billede di8leva Nybegynder
12. november 2002 - 12:16 #7
en CAB fil er något som Microsoft har påfundet....

"det er som en JAR fil men utan en manifest-fil" og den er 50% av størrelsen på en JAR fil"

derfor vill jag bruge den. Dessutom er en CAB-fil persistent, den kan installeras på client-siden så brugeren bara laddar ner den en gång, og sedan kør den fra sin egen maskin.
jag har inte hittat en måde att gøra en JAR-fil persistent....

det er let att gøra en classloader siger du.
hvordan? kan du post:a kod som behøvs, fra public class till }

=)
Avatar billede carstenknudsen Nybegynder
12. november 2002 - 12:32 #8
Du har stadig ikke skrevet hvilket format CAB er i?
Er den binær og hvordan etc...
Jeg ved ikke hvad du mener med persistent,
en jar fil fil kan også downloades en gang
og bruges af brugeren derefter. Du kan ikke bruge
et eksempel på en classloader til noget, med
mindre du ved hvordan der skal læses fra filer/url
eller hvadvedjeg. Hvis jeg får lidt mere information
om CAB skal jeg gerne skrive en classloader.
Avatar billede arne_v Ekspert
12. november 2002 - 12:50 #9
CAB er et MS format. Formatet er mig bekendt
ikke engang publiceret, men der er system kald
på Windows til at læse dem.

Det bruges til at pakke software ned i i et
"ægte" windows setup.

Og jeg tror ikke på, at det er så meget bedre
end jar til at komprimere.
Avatar billede arne_v Ekspert
12. november 2002 - 12:55 #10
Så vidt jeg kan se har du 2 muligheder:

1)  Udpakke class-filerne fra CAB med et
    standard Windows tool og pakke dem ned i
    en ny jar fil. Meget nemt at gøre, men
    du får måske problemer med signingen.

2)  Du skriver din egen classloader som bruger
    JNI til at kalde Windows rutinerne til at hente
    ud fra en CAB med. Grundliggende set skal du bare
    bruge eksemplet fra API JavaDoc (se under ClassLoader).
Avatar billede di8leva Nybegynder
12. november 2002 - 13:03 #11
arne_v >> jag vill ikke udpakke filerna fra CAB, jag vill ha dem i CAB-filen

min JAR fil med maximum compression bliver 2000kB og min CAB fil bliver 800kB, de er forskellige!

carsten >> hvordan gor man så att en JAR fil stannar på client-sidan så den ikke downloadas varje gång. Nær vi signar jar-filen tar det 60 minnuter att download den, og det er slet ikke acceptabelt, ikke ens en gång...

jag kigger nu på ClassLoader tutorial på IBM og de har bra eksempel, men hvordan siger man till en applet att bruge en anden classloader?
Avatar billede di8leva Nybegynder
13. november 2002 - 06:54 #12
oki, efter att ha tittat på classloaders og CAB-filer har jag kommit fram till att det skall ikke bruges...

carsten >> du får gærna berætta hvordan man låter en JAR-fil installeras på client:en. Jag har en signed JAR-fil, men den download:as varje gång brugeren startar om sin browser og stannar alltså ikke på clien-siden...
Avatar billede carstenknudsen Nybegynder
13. november 2002 - 10:17 #13
Jeg bruger ikke applets, så jeg er ikke hjemme i hvad
der tillades og ikke tillades. Det er dog helt sikkert
at du ikke kan få lov at installere jar filen hos
klienten uden klientens tilladelse, alt andet ville
være farligt.
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