On Wed, 28 Nov 2001 14:43:33 +0100, "Jens Christian Gram"
<jussi@mailme.dk> wrote:
>Problemet består i at jeg i mit program gerne vil lade brugeren tilføje
>klasser. Det vil sige at brugeren skal gå ind og vælge filen, hvorefter
>mit program loader klassen, og gør noget ved den (jeg ved at klassen
>overholder et bestemt interface).
>Hvordan kan det laves? (kan det laves?)
Du kan bruge reflection (Kig på java.lang.reflect).
Hmmm, kræver nok også lige et eksempel. (Prøv evt. også at søg på
<URL:
http://java.sun.com>).
Eksemplet er et stykke tilrettet kode fra en af mine egne
applikationer, jeg håber jeg har fået det tilrettet så der ikke er
noget specifikt snask for min egen applikation. - Sig til hvis du har
spørgsmål.
/* Her kan du definere hvilken klasse du vil lave en instans af. - Du
kan evt. ved programstart køre en folder igennem eller lignende. */
myClass = Class.forName("package.for.your.class");
/* Hvilke parametre tager klassen? - I dette eksempel, en Vector og en
int. */
Class parameterTypes[] = new Class[2];
parameterTypes[0] = Vector.class;
parameterTypes[1] = int.class;
try {
Constructor ct = myClass.getConstructor(parameterTypes);
Object parameterList[] = new Object[2];
parameterList[0] = new Vector();
parameterList[1] = new Integer(80);
try {
DitInterface myPlugin =
(DitInterface)ct.newInstance(parameterList);
// Nu kan du så bruge myPlugin.
}
catch (InstantiationException IE) {
System.out.println("Could not Instantiate plugin: " +
myClass + ", possibly not correct constructor!");
}
catch (IllegalAccessException IAE) {
System.out.println("The plugin: " + myClass + ", is
trying to access methods or fields it does not have rights for!");
}
catch (InvocationTargetException ITE) { // if the underlying
constructor throws an exception
System.out.println("The plugin: " + myClass + ", threw
an Exception: " + ITE);
}
}
catch (NoSuchMethodException NSME) {
System.out.println("Could not Instantiate plugin: " + myClass
+ ", possibly not correct constructor!");
}
--
Guideix Martin Mouritzen Phone +45 43270524
Ringager 2A, 1. Java Developer Fax +45 43270556
DK-2605 Brøndby mm@guideix.com
http://www.guideix.com