[英]Execute .jar file from a Java program
我如何从 java 程序运行本地 jar 文件?
jar 文件不在 Java 调用程序的类路径中。
我建议您使用ProcessBuilder
并启动新的JVM。
以下是一些入门知识:
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));
在Windows上执行的另一种方法是:
Runtime.getRuntime().exec("cmd /c start jarFile");
这样,您还可以设置进程的优先级(正常/低/等)
首先,您对问题的描述还不清楚。 我不知道您是否要从jar文件中加载类以在应用程序中使用,还是jar包含要运行的主文件。 我认为这是第二个。
如果是这样,您在这里有很多选择。 最简单的方法如下:
String filePath; //where your jar is located.
Runtime.exec(" java -jar " + filepath);
瞧...如果您不需要运行jar文件,而是从中加载类,请告诉我。
您可以仅使用这一行代码从任何位置运行jar文件。
Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));
哪里
new File("your path to jar")
希望能帮助到你。
谢谢。
使用参数调用静态方法main
String args[] = {"-emaple","value"}; PortMapperStarter.main(args);
要从Java应用程序内部运行可执行jar,可以从https://docs.oracle.com/javase/tutorial/deployment/jar/examples/JarClassLoader.java复制JarClassLoader
像这样使用它。 在此代码段中, jarUrl
是从其中下载jar的URL,例如文件:/tmp/my-jar.jar,而args是要作为命令行参数传递给jar的字符串数组。
JarClassLoader loader = new JarClassLoader(jarUrl);
String main = loader.getMainClassName();
loader.invokeClass(main, args);
请记住,您现在要在代码中插入其他人的二进制文件。 如果陷入无限循环,则线程挂起;如果调用System.exit(),则JVM退出。
这是我的方法,我认为它更完整:
public static Process exec(String path, String filename) throws IOException {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
File.separator + "bin" +
File.separator + "java";
ProcessBuilder pb = new ProcessBuilder(javaBin, "-jar", path+filename);
return pb.start();
}
1)从环境变量设置类路径
2)转到您的jar文件所在的文件夹
3)通过命令提示符运行以下命令
java -jar jarfilename
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.