我正在尝试使用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
文件。
有没有人有任何想法,为什么这可以在一台机器上,但不是另一台?
您确定存在'C:\ Program Files \ MSG MCE Software I10 \'吗? –
是的,它存在。只是意识到Eclipse和JAR在不同的驱动器上。看起来,将ProcessBuilder从D更改为C目录不起作用。也许是出于安全原因的Java限制?不确定。 – Marquinio