从Java程序执行.jar文件
如何从java程序运行本地jar文件 jar文件不在Java调用者程序的类路径中。我建议您使用并启动一个新的JVM 以下是一些让您开始学习的内容:从Java程序执行.jar文件,java,jar,executable-jar,Java,Jar,Executable Jar,如何从java程序运行本地jar文件 jar文件不在Java调用者程序的类路径中。我建议您使用并启动一个新的JVM 以下是一些让您开始学习的内容: ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar"); pb.directory(new File("preferred/working/directory")); Process p = pb.start(); 首先,对您的问题的描述有点不清楚。我不
ProcessBuilder pb = new ProcessBuilder("/path/to/java", "-jar", "your.jar");
pb.directory(new File("preferred/working/directory"));
Process p = pb.start();
首先,对您的问题的描述有点不清楚。我不明白您是想从jar文件中加载类以在应用程序中使用,还是jar包含要运行的主文件。我假设是第二个 如果是这样,你有很多选择。 最简单的方法如下:
String filePath; //where your jar is located.
Runtime.exec(" java -jar " + filepath);
瞧。。。
如果您不需要运行jar文件,而是从中加载类,请告诉我。以下内容有用吗
在windows上执行此操作的另一种方法是:
Runtime.getRuntime().exec("cmd /c start jarFile");
通过这种方式,您还可以设置进程的优先级(正常/低/etc)1)从环境变量设置类路径
2) 转到jar文件所在的文件夹
3) 通过命令提示符运行以下命令
java-jarjarfilename只要使用这一行代码,就可以从任何地方运行jar文件
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));
Desktop.getDesktop().open(new File("D:/FormsDesktop.jar"));
在哪里
希望能有帮助
谢谢
String args[] = {"-emaple","value"};
PortMapperStarter.main(args);
要从java应用程序内部运行可执行jar,可以从 像这样使用它。在这个代码段中,
jarUrl
是下载jar的URL,例如,args是要作为命令行参数传递给jar的字符串数组
JarClassLoader loader = new JarClassLoader(jarUrl);
String main = loader.getMainClassName();
loader.invokeClass(main, args);
请记住,您现在正在将其他人的二进制文件插入到您的代码中。如果它陷入无限循环,则线程挂起;如果它调用System.exit(),则JVM退出 @aioobe我可以将System.out集成到原始程序中吗?请原谅这个问题,但我是Java新手,不确定我是否理解您的评论,但是您从
start()
返回了一个过程,它为您提供了getInputStream
/getOutputStream
。再次抱歉。。如果我想像我一样向jar传递一个参数,只需向ProcessBulider
构造函数添加更多参数:newProcessBuilder(“/path/to/java”、“-jar”、“your.jar”、“arg1”、“arg2”)代码>请将您自己(踢和尖叫-如果需要)拖入Java 1.5和ProcessBuilder的功能中。此解决方案将与ProcessBuilder
解决方案相同(除非您想关闭等),并且您需要键入更少的内容。在我的原因中,我需要一个在打开jar后自动关闭的启动器,这对我来说已经足够了。请记住,ProcessBuilder是现在推荐的调用二进制文件的方法,java 9中有一些新的增强功能:。已经有一篇文章讨论了运行时和ProcessBuilder之间的区别:。如果需要指定工作目录,则此方法将不起作用。ProcessBuilder帮助了我(如上面的答案所示)。问题是如何从程序运行jar文件,而不是如何从命令行运行。请使用System.err.println(新字符串(c));用于打印错误消息。
JarClassLoader loader = new JarClassLoader(jarUrl);
String main = loader.getMainClassName();
loader.invokeClass(main, args);