J'utilise la méthode suivante pour appeler une classe à l'intérieur d'un fichier jar:URLClassLoader + loadClass + appelle la méthode principale sur un processus autonome? Java
invokeClass("path.to.classfile", new String[] {});
public static void invokeClass(String name, String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, MalformedURLException {
File f = new File(System.getProperty("user.home") + File.separator + ".myapplication"+File.separator+"myjar.jar");
URLClassLoader u = new URLClassLoader(new URL[]{f.toURI().toURL()});
Class c = u.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) {
}
}
Est-il possible d'invoquer cela sur un processus distinct? Donc, l'application en cours d'exécution et la nouvelle application invoquée n'ont rien en commun? Situation: Vous lancez le programme a (mise à jour du client). A partir du client a, vous lancez le programme b (client)
Avec le code actuel, projetez ET toutes les instances du projet b partagent le même espace de segment. J'essaie de parvenir à un état où toutes les instances du projet b sont autonomes et ne se soucient pas si le projet A est terminé ou non.
cela fonctionnera si le programme qui ne pb.start() se termine? – TofuBeer
Theres est seulement une façon de savoir ... – OscarRyz
Cela fonctionnera-t-il si la variable d'environnement java n'est pas définie (par exemple Mac OS X?) [Ne peut pas tester sur mac os x] – Peeter