abcd423417984 Skrevet 25. juni 2006 Del Skrevet 25. juni 2006 Hei Er det noen her som vet hvordan man best/enklest mulig kan laste inn klassefiler under kjøring? Mao angi en sti/klassenavn også leser den inn og benytter metoder den vet eksisterer (gjerne sjekker om de eksisterer også). Det må være mulig å lese disse enten fra et tilfeldig sted på disk eller fra inni gjeldende .jar fil. Tenker da i forbindelse med å lage addons/plugins. Takker for svar. Lenke til kommentar
Bro2 Skrevet 26. juni 2006 Del Skrevet 26. juni 2006 Hei Dette er ikke det enkleste du kan finne på. Anbefaler å søke på http://forum.java.sun.com/index.jspa Lenke til kommentar
threiran Skrevet 26. juni 2006 Del Skrevet 26. juni 2006 Her er en "copy-fikselitt-paste" fra noe jeg har holdt på med: java.net.URL link1 = getClass().getResource("myLittleJarFile.jar"); if (link1 == null) { //Filen spesifisert i linken kunne ikke bli funnet return; } java.net.URL link2 = getClass().getResource("myHugeJarFile.jar"); if (link2 == null) { //Filen spesifisert i linken kunne ikke bli funnet return; } java.net.URL drivers[] = new java.net.URL[2]; drivers[0] = link1; drivers[1] = link2; java.net.URLClassLoader loader = new java.net.URLClassLoader(drivers); try { Class myClass = Class.forName("MyClassName", true, loader); //Hvis du har tilgang til jarfilene under kompilering: MyClassName myClassInstance = (MyClassName)driverClass.newInstance(); //Ellers er det på tide å lese seg opp på reflection } catch (ClassNotFoundException e) { return; } catch (InstantiationException e) { return; } catch (IllegalAccessException e) { return; } Jeg har biblioteket tilgjenglig ved kompilering, men pakker det inn i den totale .jar fila, og henter det derifra ved kjøring. (Var i alle fall planen, og det ser lovende ut så langt). CPL Lenke til kommentar
Drømmemannen Skrevet 30. juni 2006 Del Skrevet 30. juni 2006 java.lang.reflect inneholder alt du trenger: The Reflection API Lenke til kommentar
krigun Skrevet 10. juli 2006 Del Skrevet 10. juli 2006 Reflection er utrolig morsomt (Dette er skrevet løst etter hukommelse, feil kan forekomme): Class c = Class.forName("org.monkeys.BananaClass"); Class instance = c.newInstance(); Class[] args = new Class[0] Method method = instance.getMethod("doMonkeysFindMeAttractive()", args); Object result = method.invoke(null); System.out.println((String)result); ---------- MEN: dette er et mye fetere forslag: Lag plugins til app'en din som et sett med scripts (Beanshell, javascript, ruby (jruby), whatnot..), så kan du bare droppe noen scripts i en mappe eller noe sånt, så har du en lytter på den mappa som laster de scriptene den finner. Du må da definere hva disse scriptene skal ha tilgang til da av modeller/objekter i din gjennom interpreter exporteren (les docs om beanshell og/eller rhino og/eller jruby og/eller noen andre java scripting extension API). Du kan evt støtte alle disse språkene da hvis du vil, er ikke så mye arbeid. Reflection er moro, men er ganske knotete. Scripting er dynamisk og kan endre applikasjonen din uten å trenge omkompilering. Rhino blir forresten med i neste versjon av Java (6). Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå