Avatar billede cautoo Nybegynder
10. juni 2008 - 15:44 Der er 8 kommentarer og
1 løsning

Loading af externe filer

Hej

Jeg har tidliger spurgt hvordan det er muligt, at have et java program i en jar fil. Og så hertil en jar fil ved siden af, som man gerne vil loade som et modul til hovedprogrammet.
http://www.eksperten.dk/spm/812586
Jeg modtog også en svar, som jeg nu har forsøgt mig med, på flere måder.
Jeg har lige nu en hoved JAR fil, som har en klasse der loader externe JAR filer, ved hjælp af koden fra forrige spørgsmål:
ModulStandard m = (ModulStandard)Class.forName("minpakke.MinKlasse").newInstance();
Men den giver blot en exception retur: java.lang.ClassNotFoundException: testprogram.Itestprogram

Nogen der kan hjælp mig med, hvad jeg gør galt?
Avatar billede arne_v Ekspert
10. juni 2008 - 18:26 #1
Hvis jar fil ikker er i classpath saa skal du bruge en ny classloader.
Avatar billede arne_v Ekspert
10. juni 2008 - 18:28 #2
URL[] url = new URL[1];
      url[0] = new URL(urltiljarfile);
      URLClassLoader cl = new URLClassLoader(url);
      ModulStandard m = (ModulStandard)Class.forName("minpakke.MinKlasse", true, cl).newInstance();
Avatar billede cautoo Nybegynder
10. juni 2008 - 19:16 #3
I urltiljarfile sætter jeg
file://C:/Users/cautoo/Documents/JavaProgram
Og i mappen har jeg sådan set både mit programs jar fil, og den jar fil jeg ønsker loadet som hedder testprogram.jar. Jeg skriver altså testprogram.Itestprogram i forName (hvor Itestprogram.class liggger i jar filen) og får:
java.lang.ClassNotFoundException: testprogram.Itestprogram
Synes efterhånden jeg har prøvet mange udgaver, den gav en generel url fejl hvis ikke jeg skrev file://. Jeg tror ikke jeg helt har forstået, kan du hjælpe?
Avatar billede arne_v Ekspert
10. juni 2008 - 19:23 #4
Man angiver ikke dirs for jar filer men selve jar filerne.

Saa proev:

file://C:/Users/cautoo/Documents/JavaProgram/testprogram.jar
Avatar billede cautoo Nybegynder
10. juni 2008 - 19:48 #5
Oki, med jar: foran og !/ til sidst, fik jeg det til at virke..
Nu er så mit problem, at når class filerne ikke ligger samme sted, er det som om den ikke accepterer at class filen for ModulStandard i programfilen og i modul jar filen ikke er de samme. Hvordan får jeg den til at acceptere en relation her? Prøved at lave en jar fil kun til den, som jeg så importerede med ind ved java compilation, sådan at jar classfilen lå externt. Men synes ikke at kunne få det til at virke? Nogen idéer?
Avatar billede cautoo Nybegynder
10. juni 2008 - 19:52 #6
Eller ja, ved ikke om det er problemet men den skriver
java.lang.ClassCastException: Itestprogram cannot be cast to AProgramSet
og det problem har jeg ikke, hvis jeg blot ligger alle class filer i samme mappe, og kører forName funktionen
Avatar billede arne_v Ekspert
11. juni 2008 - 08:15 #7
Class a.b.c.D loadet med en classloader og a.b.c.D loadet med en anden classloader er
2 forskellige klasser i Java. Det er en af de vigtigste pointer med classloadere !

Hvis du skal have den samme klasse, saa skal den kun loades af en classloader.
Avatar billede cautoo Nybegynder
11. juni 2008 - 16:49 #8
Jeg fik det til at virke. Tak for hjælpen..
Du må gerne kaste et svar :)

Foresten - nu prøver jeg lige at spørge her
Har du nogen erfaring med.. når jeg laver en jar fil og kører den i windows, da jeg ikke har nogen gui kan man slet ikke se programmet. Er der en måde hvorpå man kan få den til at vise noget kommandopromt agtigt prompt, så man kan lukke programmet, uden at skulle bruge taskmanager, og så man kan se evt. system.out.prints som den skulle udskrive?
Avatar billede arne_v Ekspert
11. juni 2008 - 17:46 #9
svar

enten kan du lave et shortcut til

java.exe -jar foobar.jar

eller du kan associere .conjar med java.exe (.jar er associeret med javaw.exe)
og kalde din jar for foobar.conjar !
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