Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wenn Du den Classpath nicht zu beliebigen Zeitpunkten während der Laufzeit ändern willst, sondern ihn nur einmal während der Initialisierung setzen willst, dann könntest Du auch den Classpath als String zusammenbauen und dann die eigentliche Anwendung per Runtime#exec( "java -cp " + myClasspath + " " + mainClass) starten. Ist natürlich aus Memory- und Performance-Sicht eher suboptimal...
Nee, ich möchte die Inhalte Jar während der LAUFZEIT importieren.
Habs auch so weit schon, das ich die Klassen aus der Jar extrahiere und dann in meinem ClassLoader defineClass(...)
aufgerufen habe.
Funktioniert auch. zumindest bekomme ich da keine Fehlermeldung.
Die Fehlermeldung bekomme ich erst dann, wenn ich eine Klasse instanzieren möchte.
Also:
Ich instanziere eine Klasse mit klasse.newInstance();
Wenn diese Klasse aber noch eine Klasse aus der Jar benötigt, kommt die Fehlermeldung, dass genau diese Klasse fehlt, obwohl ich die Klasse schon vorher mit define(...) schon definiert habe.
Nimm dir einen java.net.URLClassLoader, und rufe aus dem die loadClass Methode auf. Die gibt dir das passende Class-Objekt zurück.
In die URLs für den URLClassLoader packst du einfach den Pfad zur jar rein (File#getURL()).
Und mein Konstruktor hat Aufbau (Graphcis..,Stack,Menu,Integer)
Code:
File fJar = new File(strJar);
URL url = null;
try
{
//holt sich das jar file in url form
url = fJar.toURL();
URLClassLoader urlcl = new URLClassLoader(new URL[]
{url});
Class clazz = Class.forName(strPackage, true, urlcl);
//deklariert 4 Parameter
Class[] formparas = null;
formparas[0] = GraphicsConfiguration.class;
formparas[1] = Stack.class;
formparas[2] = Object.class;
formparas[3] = Integer.class;
Constructor cons = null;
cons = clazz.getConstructor(formparas);
Object[] actargs = new Object[]
{
GraphicsEnvironment.
getLocalGraphicsEnvironment().
getDefaultScreenDevice().
getDefaultConfiguration()
, stack, menuObj, new Integer(5)};
Object currentProgram = cons.newInstance(actargs); //startet den Konstruktor und somit das Programm und merkt sich das Objekt
Wenn man nur was instanzieren will und net starten, schauts halt bisi anders aus!