Hallo, ich habe folgende Situation:
Gegeben ist ein Dialog zum Einbinden von Plugins (meiner Anwendung). Es werden JAR-Dateien ausgewählt, die nach Java-Klassen durchsucht werden, die ein bestimmtes Interface "PlugIn" implementieren. Diese Klassen sollen in einer Combobox zur Auswahl gegeben werden.
Ich habe folgenden Quelltext (vereinfacht):
Die Jar-Datei wird außerdem zum classpath hinzugefügt.
Mein Problem:
Sobald ein Fehler im Classloader auftritt (z.B. ClassNotFoundException bei vererbten unbekannten Klassen), bricht die for-Schleife ab - trotz try-catch-Block. Genauer gesagt wird der komplette AWT-Thread (Aktion bei Button-Klick) abgebrochen. Das Programm läuft dann aber weiter.
Ist das Verhalten des Classloaders korrekt oder ein Bug der 1.6-Beta-Version? Wie kann ich das vermeiden? Gibt es eine andere Alternative, Informationen über die Klasse zu erfahren?
Gegeben ist ein Dialog zum Einbinden von Plugins (meiner Anwendung). Es werden JAR-Dateien ausgewählt, die nach Java-Klassen durchsucht werden, die ein bestimmtes Interface "PlugIn" implementieren. Diese Klassen sollen in einer Combobox zur Auswahl gegeben werden.
Ich habe folgenden Quelltext (vereinfacht):
Code:
final JarFile jarFile = new JarFile(filename, false, JarFile.OPEN_READ);
for(Enumeration<JarEntry> enumeration = jarFile.entries(); enumeration.hasMoreElements(); ) {
final JarEntry entry = enumeration.nextElement();
try {
if(!entry.isDirectory() && entry.getName().toLowerCase().endsWith(".class")) {
final String className = entry.getName().replaceAll("/", ".").substring(0, entry.getName().length()-6);
if(PlugIn.class.isAssignableFrom(Class.forName(className))) {
// füge zu combobox hinzu
};
};
} catch (Exception e1) {e1.printStackTrace();}
};
Die Jar-Datei wird außerdem zum classpath hinzugefügt.
Mein Problem:
Sobald ein Fehler im Classloader auftritt (z.B. ClassNotFoundException bei vererbten unbekannten Klassen), bricht die for-Schleife ab - trotz try-catch-Block. Genauer gesagt wird der komplette AWT-Thread (Aktion bei Button-Klick) abgebrochen. Das Programm läuft dann aber weiter.
Ist das Verhalten des Classloaders korrekt oder ein Bug der 1.6-Beta-Version? Wie kann ich das vermeiden? Gibt es eine andere Alternative, Informationen über die Klasse zu erfahren?