我尝试使用ProcessBuilder
从Java代码执行第三方JAR。此JAR要求您在执行此JAR时必须位于安装目录中,否则它将无法工作。以下是此第三方JAR的文件夹结构:
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 :(得分:1)
好的,我明白这一点。在它运行的计算机上,Eclipse,Tomcat等所有程序都安装在同一个C驱动器上,但在另一台计算机上,Eclipse安装在不同的驱动器上。
第三方JAR安装在C盘上,我的程序在Eclipse上运行但在D盘上运行。由于某种原因,ProcessBuilder中的更改目录到C驱动器不起作用。出于安全原因,不确定这是否是ProcessBuilder的限制,但是在一个驱动器上安装所有内容都有效。