[英]Runtime.getRuntime().exec() does not execute external client jar
[英]Open external .jar with Runtime.getRuntime().exec with java
所以我有这段代码可以正常工作,它从我在PC中配置为红色ubication的另一台计算机启动.jar文件
Runtime.getRuntime().exec("java -jar Z:\\AAA\\BBB\\CCC\\ZZZ.jar");
但是现在我想从外部路径启动.jar而不使用快捷方式(所以我可以在未配置红色泛滥的机器上使用此代码启动它)
Runtime.getRuntime().exec("java -jar MMM\\NNN LLL\\OOO\\AAA\\BBB\\CCC\\ZZZ.jar");
但是可以完成工作(我可以手动访问和打开文件而不会出现问题)。
当我在命令提示符下输入java -jar MMM\\\\NNN LLL\\\\OOO\\\\AAA\\\\BBB\\\\CCC\\\\ZZZ.jar
,它返回我Error: Unable to access jarfile MMM\\NNN
,所以可能是一个问题是路径在文件夹名称中有一个空格,但是我认为这可能也是其他原因。
问题是,如果问题是空间,我该如何解决? 我找不到办法。 另一方面,我如何在另一台机器上运行它? 我必须以某种方式使用那个红色的泛化IP?
PD:使用此代码,它返回我为true
File f = new File("\\\\MMM\\NNN LLL\\OOO\\ZZZ.jar");
System.out.println(f.exists()); //--> true
因此,看起来空格不会干扰路径(启动时测试中的四个“ \\”似乎没有任何作用)
我听说其他人有这样的问题。 这样做的主要原因是,Java exec方法可能不支持网络(SMB)。 因此,它甚至都不会尝试从网络打开。
无论如何,从网络运行这样的代码可能不是最佳解决方案。 首先,网络可能不可用,或者即将到来的Java文件可能已损坏。 如果您想正确执行此操作,则有以下几种选择:
创建一个有效的bat文件并执行该文件-您甚至可以先在本地复制该文件,以确保该文件首先可用(如果文件很大并且网络出现故障)
使用java将文件复制到工作目录并从那里执行。
通过下载执行此操作的一个好处是可以维护文件的版本(哈希?),因此如果文件相同,则不必下载。 或者,您也可以回退-如果网络驱动器不可用,请执行上次下载的版本。
这样,它将把jar的版本保留在本地,而不必每次都下载。 如果可用,它还将下载一个新版本,并且代码将成为主流(例如,不依赖于平台/个人计算机)
@MadProgrammer给出的答案很好用!
ProcessBuilder builder = new ProcessBuilder("java", "-jar", "MMM\\NNN LLL\\OOO\\AAA\\BBB\\CCC\\ZZZ.jar");
try {
builder.start();
} catch (IOException e) {
e.printStackTrace();
}
非常感谢! 无论如何要检查Veselin Davidov发表的想法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.