/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Dynamisk loading af klasser...
Fra : Michael Banzon


Dato : 14-11-02 23:46

Hey...

Er der noget der kan hjælpe mig med at
få indlæst og lavet objekter af nogle
klasser - dynamisk???

Problemet er ikke med klasser der bare
"er til stede", men med klasser indeholdt
i jar-filer... !!!

Nogle forslag??

/ Michael


 
 
Brian Matzon (15-11-2002)
Kommentar
Fra : Brian Matzon


Dato : 15-11-02 07:33

Michael Banzon wrote:
> Hey...
>
> Er der noget der kan hjælpe mig med at
> få indlæst og lavet objekter af nogle
> klasser - dynamisk???
>
> Problemet er ikke med klasser der bare
> "er til stede", men med klasser indeholdt
> i jar-filer... !!!
jamen, så er de også til stede! - de skal bare med i din classpath...

Har du mulighed for dette, eller er jar filen først synlig efter dit
program er opstartet?

Hvis du har mulighed for at hente dem fra classpathen, kan du bruge:
Class.forName("pakken.Klassen");

ellers må du igang med:
classLoader.defineClass("pakken.Klassen", bytes, offset, length);

/Brian Matzon


Michael Banzon (15-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 15-11-02 09:36

Brian Matzon wrote:


> Har du mulighed for dette, eller er jar filen først synlig efter dit
> program er opstartet?

Nej, desværre, det skal nemlig bruges til noget med
dynamiske moduler...

> ellers må du igang med:
> classLoader.defineClass("pakken.Klassen", bytes, offset, length);

Kiger lige på det...

Tusind tak...

/ Michael


Michael Banzon (15-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 15-11-02 09:42

Michael Banzon wrote:

>> ellers må du igang med:
>> classLoader.defineClass("pakken.Klassen", bytes, offset, length);
>
>
> Kiger lige på det...

Men, hov! Hvad så hvis der er andre klasser i pakken som
den pågældende klasse skal bruge?? Noget der ved det eller
skal jeg virkelig teste det... ???

Det skulle jo gerne fungere sådan at mit program ved at der
er en bestemt klasse, med et bestemt navn i .jar-filen,
som det så kan loade, og så klarer denne klasse selv resten.

/ Michael

P.S. Hmmm... Ja, det kan vel også løses på samme måde...
meeeen.....


Michael Banzon (15-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 15-11-02 09:56

Michael Banzon wrote:
> Brian Matzon wrote:
>
>
>> Har du mulighed for dette, eller er jar filen først synlig efter dit
>> program er opstartet?
>
>
> Nej, desværre, det skal nemlig bruges til noget med
> dynamiske moduler...
>
>> ellers må du igang med:
>> classLoader.defineClass("pakken.Klassen", bytes, offset, length);
>
>
> Kiger lige på det...
>
> Tusind tak...
>
> / Michael
>

Forresten, så var jeg så "naiv" at jeg troede at jeg kunne ændre
man class-path under udførsel af programmet.... men det kan man
ikke.... ??? Eller???

Alstså noget i stil med:

System.setProperty("java.class.path", new
String(System.getProperty("java.class.path") +
System.getProperty("path.separator") + "modul.jar");

Og så skulle det køre li'som:

"java -cp .:module.jar Program" <--- (for DET virker jo)

.... .... .... ... ...

Nogle forslag??

/ Michael


Brian Matzon (15-11-2002)
Kommentar
Fra : Brian Matzon


Dato : 15-11-02 17:11

Michael Banzon wrote:
> Forresten, så var jeg så "naiv" at jeg troede at jeg kunne ændre
> man class-path under udførsel af programmet.... men det kan man
> ikke.... ??? Eller???
Tror jeg ikke man kan...

> Nogle forslag??
jeps.
Lav din egen classloader. Sidst jeg lavede en, var det ret simpelt...
tjek bl.a her:
http://www.javaworld.com/javaworld/jw-03-2000/jw-03-classload.html
http://www.javaworld.com/javaworld/jw-04-2000/jw-0421-zipclass.html

sidste link er en classloader der loader fra zip filer - eller sagt med
andre ord, det du vil lave...

/Brian Matzon


Mads Andreasen (20-11-2002)
Kommentar
Fra : Mads Andreasen


Dato : 20-11-02 10:30

Hejsa

Du behøver ikke lave din egen classloader for at loade klasser fra jar
filer.
Kig på URLClassLoader
I nedenstående eksempel loades en jar fil der hedder test1.jar og ligge i
plugins undermappen. Derefter instantieres Test klassen og Test.Name()
kaldes.
************Eksempel **********
import java.net.URL;
import java.net.URLClassLoader;
import Plugin; //Interface
public class Container
{
public static void main(String[] args)
{
PluginClassLoader loader = new PluginClassLoader();
Class anonClass = null;
Class anonClass2 = null;
Plugin testPlugin;
Plugin testPlugin2;
try
{
URL urlForClassLoader = new URL("jar:file:" + "plugins/test1.jar!/");
URLClassLoader urlClassLoader = new URLClassLoader(new
URL[]{urlForClassLoader});
anonClass2 =urlClassLoader.loadClass("Test");
testPlugin2 = (Plugin) anonClass2.newInstance();
System.out.println(testPlugin2.Name());
}
catch (Exception ex)
{
System.out.println(ex);
}
}
}
***********Eksempel Slut ************

"Brian Matzon" <brian@matzon.dk> wrote in message
news:3dd51c7e$0$35909$edfadb0f@dread13.news.tele.dk...
> Michael Banzon wrote:
> > Forresten, så var jeg så "naiv" at jeg troede at jeg kunne ændre
> > man class-path under udførsel af programmet.... men det kan man
> > ikke.... ??? Eller???
> Tror jeg ikke man kan...
>
> > Nogle forslag??
> jeps.
> Lav din egen classloader. Sidst jeg lavede en, var det ret simpelt...
> tjek bl.a her:
> http://www.javaworld.com/javaworld/jw-03-2000/jw-03-classload.html
> http://www.javaworld.com/javaworld/jw-04-2000/jw-0421-zipclass.html
>
> sidste link er en classloader der loader fra zip filer - eller sagt med
> andre ord, det du vil lave...
>
> /Brian Matzon
>



Michael Banzon (20-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 20-11-02 15:38

Ok, det er ok, men hvad hvis nu at min klasse Test laver et
objekt af typen Foo der også er indeholdt i .jar-filen...
Går det godt??

/ Michael


Mads Andreasen (20-11-2002)
Kommentar
Fra : Mads Andreasen


Dato : 20-11-02 17:59

Hejsa

Det har jeg også prøvet, ingen problemer.

-Mads

"Michael Banzon" <anyone@anywhere.anyhow> wrote in message
news:3DDB9E47.7000600@anywhere.anyhow...
> Ok, det er ok, men hvad hvis nu at min klasse Test laver et
> objekt af typen Foo der også er indeholdt i .jar-filen...
> Går det godt??
>
> / Michael
>



Michael Banzon (20-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 20-11-02 20:56

Ja,
Den er helt raket! Det virker jo...



/ Michael

"Mads Andreasen" <mwaREMOVE THIS@doms.dk> skrev i en meddelelse
news:3ddbbf6e$0$23291$edfadb0f@dread13.news.tele.dk...
> Hejsa
>
> Det har jeg også prøvet, ingen problemer.
>
> -Mads
>
> "Michael Banzon" <anyone@anywhere.anyhow> wrote in message
> news:3DDB9E47.7000600@anywhere.anyhow...
> > Ok, det er ok, men hvad hvis nu at min klasse Test laver et
> > objekt af typen Foo der også er indeholdt i .jar-filen...
> > Går det godt??
> >
> > / Michael
> >
>
>



Michael Banzon (21-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 21-11-02 21:08

> Ja,
> Den er helt raket! Det virker jo...

Men hov!
Hvad så med klasser der har samme navn?? Altså...
Hvis jeg i både foo.jar og bar.jar har en klasse der hedder
GUI?? Hvad sker der så?

Kan man bruge package (ja, altså pakker)??

I behøver ikke teste det, det skal jeg nok selv gøre medmindre at der
er nogle der har helt konkrete svar??

/ Michael



zigge (15-11-2002)
Kommentar
Fra : zigge


Dato : 15-11-02 20:08

Prøv at kikke lidt på Java-beans, de skal kunne det du snakker om

ellers loader man en klasse med class.forName(java.lang.FeksMyClass) ligesom
hvis du loader en driver...

//ZIGGE


"Michael Banzon" <anyone@anywhere.anyhow> wrote in message
news:3DD4278A.2080307@anywhere.anyhow...
> Hey...
>
> Er der noget der kan hjælpe mig med at
> få indlæst og lavet objekter af nogle
> klasser - dynamisk???
>
> Problemet er ikke med klasser der bare
> "er til stede", men med klasser indeholdt
> i jar-filer... !!!
>
> Nogle forslag??
>
> / Michael
>



Michael Banzon (15-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 15-11-02 23:28

> Prøv at kikke lidt på Java-beans, de skal kunne det du snakker om

Jo, det gør jeg lige...

> ellers loader man en klasse med class.forName(java.lang.FeksMyClass)
ligesom
> hvis du loader en driver...

Jo, men det virkede kun hvis den var i min class-path... ??

/ Michael



Michael Berg (19-11-2002)
Kommentar
Fra : Michael Berg


Dato : 19-11-02 22:28

Hej Michael!

Jeg kom lidt sent med i diskussionen men måske kan du bruge det alligevel.

System properties såsom classpath kan faktisk defineres på runtime tidspunktet med System.setProperty. Jeg ved ikke om ændringerne slår igennem "med det samme", men prøv det lige med en lille test. Worth a shot.

http://java.sun.com/docs/books/tutorial/essential/system/properties.html

Mvh /Michael^

"Michael Banzon" <anyone@anywhere.anyhow> wrote in message news:3DD4278A.2080307@anywhere.anyhow...
> Hey...
>
> Er der noget der kan hjælpe mig med at
> få indlæst og lavet objekter af nogle
> klasser - dynamisk???
>
> Problemet er ikke med klasser der bare
> "er til stede", men med klasser indeholdt
> i jar-filer... !!!
>
> Nogle forslag??
>
> / Michael
>

Michael Banzon (20-11-2002)
Kommentar
Fra : Michael Banzon


Dato : 20-11-02 00:05

> Jeg kom lidt sent med i diskussionen men måske kan du bruge det alligevel.

Jo tak...

> System properties såsom classpath kan faktisk defineres på runtime
tidspunktet med System.setProperty.

Men da jeg prøvede virkede det ikke...

> Jeg ved ikke om ændringerne slår igennem "med det samme", men prøv det
lige med en lille test.

Er der nogen der har forslag til hvordan det så gøres??
Eller evt. hvor lang tid der skal ventes???

/ Michael



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408509
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste