PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java] Programm PlugIn-fähig machen



Sym
18-02-2004, 17:13
Hi,

ich möchte einige Komponenten in meinem Programm PlugIn-fähig machen. Ich habe hier im Forum einen Beitrag dazu gefunden, möchte es aber gerne selbst umsetzen.

Bisher habe ich mehrere Interfaces programmiert. Ein Verzeichnis PlugIns angelegt, wo eigentlich die Binäries abgelegt werden sollen.

Die Namen der PlugIn-Klassen stehen bei mir in einer Konfigurationsdatei.

Das Problem ist jetzt, dass ich die Objekte irgendwie instanziieren muss. Ich stelle mir das so vor, dass ich die Namen aus der Datei auslese. Doch die Namen sind dann Strings. Wie kann ich das nun zu einem Objekt machen lassen und die Klasse von der abgeleitet wurde herausfinden?

Lin728
18-02-2004, 17:19
1 /* Listing4301.java */
002
003 import java.io.*;
004
005 interface HelloMeth
006 {
007 public void hello();
008 }
009
010 class CA
011 implements HelloMeth
012 {
013 public void hello()
014 {
015 System.out.println("hello CA");
016 }
017 }
018
019 class CB
020 implements HelloMeth
021 {
022 public void hello()
023 {
024 System.out.println("hello CB");
025 }
026 }
027
028 class CC
029 {
030 public void hello()
031 {
032 System.out.println("hello CC");
033 }
034 }
035
036 class CD
037 {
038 public void hallo()
039 {
040 System.out.println("hallo CD");
041 }
042 }
043
044 public class Listing4301
045 {
046 public static void main(String[] args)
047 {
048 String buf = "";
049 BufferedReader in = new BufferedReader(
050 new InputStreamReader(
051 new DataInputStream(System.in)));
052 while (true) {
053 try {
054 System.out.print("Klassenname oder ende eingeben: ");
055 buf = in.readLine();
056 if (buf.equals("ende")) {
057 break;
058 }
059 Class c = Class.forName(buf);
060 Object o = c.newInstance();
061 ((HelloMeth)o).hello();
062 } catch (IOException e) {
063 System.out.println(e.toString());
064 } catch (ClassNotFoundException e) {
065 System.out.println("Klasse nicht gefunden");
066 } catch (ClassCastException e) {
067 System.out.println(e.toString());
068 } catch (InstantiationException e) {
069 System.out.println(e.toString());
070 } catch (IllegalAccessException e) {
071 System.out.println(e.toString());
072 }
073 }
074 }
075 }

Sym
18-02-2004, 18:02
Danke,

Class.forName hat wunderbar geklappt.