ToolProvider, URLClassLoader mit ClassCastException

rud

Grünschnabel
Hallo

Ich kämpfe mit folgene Problem ( google'n hat nichts geholfen ) :

eine bestehenen Klasse B wird als Oberklasse in C (extends B) verwendet. Die Source für C wird vom Programm in C.Java erstellt
mit ToolProvider.getSystemJavaCompiler() combiliert.
mit dem URLClassLoader und Class.forName() nachgeladen.


da es viele Klassen ähnlich C geben wird, ist der nächsten Schritt ein cast von der C auf B.
Java:
           URLClassLoader classLoader = new URLClassLoader(new URL[] { _Cclass.getAbsoluteFile().getParentFile().toURI().toURL()});
            Class<B> bClass = (Class<B>) Class.forName(_s, true, classLoader); 

            Constructor<B> cons = bClass.getConstructor();
            Object bClassObject = cons.newInstance();
            B anno =  (B) bClassObject;
wenn ich das pkg in Eclipse ausführe ist alles perfekt.
aber
wird ein .jar erstellt liefert das pkg eine Exeption
Code:
Caused by: java.lang.ClassCastException: C cannot be cast to B
        at CompileDemo.load(CompileDemo.java:96)
        at CompileDemo.main(CompileDemo.java:62)
        ... 5 more

hat vielleicht jemand eine Idee, wäre nett
Danke
rud
 
Zuletzt bearbeitet von einem Moderator:

benhaze

Mitglied Platinum
Damit das Casting funktioniert müssen die Klassen der Objekte mit dem gleichen Classloader geladen werden.
Gib deinem URLClassLoader den Classloader der Klasse C mit (als parent classloader. z.B C.class.getClassloder()).
Dann sollte es klappen.