|
| 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 |
| | |
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
| |
|
|