Comment puis-je exécuter un fichier JAR local à partir d'un programme Java?
Le fichier jar ne se trouve pas dans le chemin de classe du programme appelant Java.
Je vous suggère d'utiliser une ProcessBuilder
et de démarrer une nouvelle JVM.
Voici quelque chose pour vous aider à démarrer:
ProcessBuilder pb = new ProcessBuilder("/path/to/Java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
Process proc = Runtime.getRuntime().exec("Java -jar Validate.jar");
proc.waitFor();
// Then retreive the process output
InputStream in = proc.getInputStream();
InputStream err = proc.getErrorStream();
byte b[]=new byte[in.available()];
in.read(b,0,b.length);
System.out.println(new String(b));
byte c[]=new byte[err.available()];
err.read(c,0,c.length);
System.out.println(new String(c));
Une autre façon de faire sur Windows est:
Runtime.getRuntime().exec("cmd /c start jarFile");
de cette façon, vous pouvez également définir la priorité de votre processus (normal/faible/etc).
Premièrement, la description de votre problème n’est pas claire. Je ne comprends pas si vous souhaitez charger les classes du fichier jar à utiliser dans votre application ou si le fichier jar contient un fichier principal que vous souhaitez exécuter. Je vais supposer que c'est la seconde.
Si c'est le cas, vous avez beaucoup d'options ici . La plus simple serait la suivante:
String filePath; //where your jar is located.
Runtime.exec(" Java -jar " + filepath);
Voila ... Si vous n'avez pas besoin de lancer le fichier jar mais de charger les classes, faites le moi savoir.
Vous pouvez exécuter un fichier jar à partir de n'importe quel endroit en utilisant uniquement ce code sur une ligne.
Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));
où
new File("your path to jar")
J'espère que ça aide.
Merci.
Est-ce que quelque chose comme ce qui suit pourrait être utile?
http://download.Oracle.com/javase/tutorial/deployment/jar/jarclassloader.html
Invoquer une méthode static avec des arguments
String args[] = {"-emaple","value"};
PortMapperStarter.main(args);