所以我有这个代码工作正常,它从我在我的电脑中配置的另一台机器启动.jar文件作为红色ubication
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");
但是doent工作(我可以手动访问和打开文件而没有问题)。
当我在命令提示符下输入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
所以看起来空间不会干扰路径(四个" \"在启动时似乎没有在测试中做任何事情)
答案 0 :(得分:0)
我听过其他人有这样的问题。主要原因是Java exec方法可能不是网络(SMB)。所以它甚至不尝试从网络开放。
无论如何,从网络上运行代码可能不是最好的解决方案。首先,网络可能不可用,或者java文件可能已损坏。如果你想做得好,你有几个选择:
创建一个可以运行并执行该文件的bat文件 - 您甚至可以先在本地复制该文件,以确保它首先可用(如果它很大且网络出现故障)
使用java将文件复制到工作目录并从那里执行。
通过下载这样做的一个好处就是你可以维护一个版本的文件(哈希?),所以如果它是相同的,你就不要下载它。或者您可以进行备用 - 如果网络驱动器不可用,则执行上次下载的版本。
这样它将在本地保留jar的版本,并且不必每次都下载它。它还将下载新版本(如果可用)并且代码将更加主流(例如,不依赖于平台/ PC)
答案 1 :(得分:0)
@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发布的想法