Hallo zusammen,
ich habe diese Frage schon mal indirekt in einem Thread zu meiner DB Anfrage gestellt, glaube aber das es sinnvoller ist dieses Thema als eigenen Thread hier noch einmal "sauber" zu formulieren.
Problemstellung:
Ich habe zwei Java FX Programme als Runnable jar Files. Nun möchte ich eine kleine Applikation schreiben die abfragt welches der zwei FX Programme gestartet werden soll, dieses dann startet und sich danach beendet. Die Runnable jar Files möchte ich gerne innerhalb der kleinen Wrapper App verpacken, damit ich dann am Ende nur ein Executable habe.
Ich habe bei der ersten Recherche das Oracle Tutorial zu "JarClassLoader" gefunden, bin daraus aber nicht ganz schlau geworden.
Wenn ich es richtig verstehe muss ich so einen Jar Class Loader selbst implemntieren - fertig gibt es den als Klasse im JDK nicht - richtig?
Ich habe es mal folgendermassen versucht:
Das ergibt in Eclipse erst einmal keinen Fehler.
Jetzt weiß ich aber nicht ob so etwas für mein Problem geeignet ist?
Ist das nur für JARs die ich von einer URL lade oder kann man so etwas auch für JARs innerhalb des eigenen Projektes (VuildPath) nehmen?
Wenn ja, wie müsste ich denn jetzt diesen ClassLoader anwenden um z.B. in einer Methode meines Controller (Java FX Appl) die main-Methode eines der .jar Applikation in meinem Build Path zu starten?
Wie Ihr seht - mehr Fragezeichen als Antworten - hoffe Ihr könnt da ein wenig Licht in's dunkle bringen.
Gruß
Ralf
ich habe diese Frage schon mal indirekt in einem Thread zu meiner DB Anfrage gestellt, glaube aber das es sinnvoller ist dieses Thema als eigenen Thread hier noch einmal "sauber" zu formulieren.
Problemstellung:
Ich habe zwei Java FX Programme als Runnable jar Files. Nun möchte ich eine kleine Applikation schreiben die abfragt welches der zwei FX Programme gestartet werden soll, dieses dann startet und sich danach beendet. Die Runnable jar Files möchte ich gerne innerhalb der kleinen Wrapper App verpacken, damit ich dann am Ende nur ein Executable habe.
Ich habe bei der ersten Recherche das Oracle Tutorial zu "JarClassLoader" gefunden, bin daraus aber nicht ganz schlau geworden.
Wenn ich es richtig verstehe muss ich so einen Jar Class Loader selbst implemntieren - fertig gibt es den als Klasse im JDK nicht - richtig?
Ich habe es mal folgendermassen versucht:
Java:
package application;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.JarURLConnection;
import java.net.URL;
import java.util.jar.Attributes;
public class JarClassLoader extends java.net.URLClassLoader {
URL url;
public JarClassLoader(URL url) {
super(new URL[] { url });
this.url = url;
}
public String getMainClassName() throws IOException {
URL u = new URL("jar", "", url + "!/");
JarURLConnection uc = (JarURLConnection) u.openConnection();
Attributes attr = uc.getMainAttributes();
return attr != null ? attr.getValue(Attributes.Name.MAIN_CLASS) : null;
}
public void invokeClass(String name, String[] args)
throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException {
Class c = loadClass(name);
Method m = c.getMethod("main", new Class[] { args.getClass() });
m.setAccessible(true);
int mods = m.getModifiers();
if (m.getReturnType() != void.class || !Modifier.isStatic(mods) || !Modifier.isPublic(mods)) {
throw new NoSuchMethodException("main");
}
try {
m.invoke(null, new Object[] { args });
} catch (IllegalAccessException e) {
// This should not happen, as we have disabled access checks
}
}
}
Jetzt weiß ich aber nicht ob so etwas für mein Problem geeignet ist?
Ist das nur für JARs die ich von einer URL lade oder kann man so etwas auch für JARs innerhalb des eigenen Projektes (VuildPath) nehmen?
Wenn ja, wie müsste ich denn jetzt diesen ClassLoader anwenden um z.B. in einer Methode meines Controller (Java FX Appl) die main-Methode eines der .jar Applikation in meinem Build Path zu starten?
Wie Ihr seht - mehr Fragezeichen als Antworten - hoffe Ihr könnt da ein wenig Licht in's dunkle bringen.
Gruß
Ralf