2016-08-10 26 views
0

我正在尝试使用ProcessBuilder从Java代码执行第三方JAR。此JAR要求您在执行此JAR时必须位于安装目录中,否则它将无法工作。下面是该第三方JAR文件夹结构:ProcessBuilder无法访问相对文件夹位置

C:\\Program Files\\MSG MCE Software I10 
C:\\Program Files\\MSG MCE Software I10\\jre 
C:\\Program Files\\MSG MCE Software I10\\jre\\bin 

下面是我使用的代码:

String cmdLine = "\"jre\\bin\\java\" -Xms512m -Xmx1024m -cp \"C:\\Program Files\\MSG MCE Software I10\\msgmce.jar;C:\\Program Files\\MSG MCE Software I10\\*:.\" com.mmm.his.msgmce.Main -i \"C:\\drginput\\"+inFileName+"\" -o \"C:\\drgoutput\\"+outFileName+"\" "; 
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "cd \"C:\\Program Files\\MSG MCE Software I10\"&&"+cmdLine); 
System.out.println("cmdLine->"+cmdLine); 
Process p = builder.start(); 

正如你可以看到我最初尝试导航到安装目录"C:\\Program Files\\MSG MCE Software I10\"然后尝试执行java可执行文件。

问题是我收到"System cannot find file specified",因为找不到相对路径"jre/bin/java"

现在这可以在一台机器上运行,但不能在另一台机器上运行。在创建ProcessBuilder并调用cmd.exe时,我正在导航到安装主目录,因此我应该能够访问jre/bin/java文件。

有没有人有任何想法,为什么这可以在一台机器上,但不是另一台?

+0

您确定存在'C:\ Program Files \ MSG MCE Software I10 \'吗? –

+0

是的,它存在。只是意识到Eclipse和JAR在不同的驱动器上。看起来,将ProcessBuilder从D更改为C目录不起作用。也许是出于安全原因的Java限制?不确定。 – Marquinio

回答

1

好的我想通了。在它工作的计算机上,Eclipse,Tomcat等所有程序都安装在同一个C驱动器上,但在另一台计算机上,Eclipse安装在不同的驱动器上。

第三方JAR安装在C驱动器上,我的程序在Eclipse上运行,但在D驱动器上运行。出于某种原因,将ProcessBuilder中的目录更改为C驱动器不起作用。由于安全原因,不确定这是否是ProcessBuilder的限制,但是在单个驱动器上安装所有工作。

+0

供参考:您不能通过使用'cd'来更改驱动器。要在执行'cd'命令之前将驱动器从'D:\'更改为'C:\',您可以使用'C:'。您的命令可能类似于以下内容:'“C:&cd \”C:\\ Program Files \\ MSG MCE Software I10 \“&&”+ cmdLine' –