我正在尝试使用java类中的Runtime.exec函数从另一个jar运行可执行jar .
代码是
Runtime r = Runtime.getRuntime();
Process p = r.exec("java -jar \""+_JarPath +"\" " + "\""+ args[0]+"\""+ " " +"\""+ args[1]+"\""+ " " +"\""+ args[2]+"\"" + " " +"\""+ args[3]+"\"");
Run Code Online (Sandbox Code Playgroud)
这里,参数args不是null并且定义良好.
此代码在Windows平台上运行良好,但在Linux上,我收到错误
无法访问jarfile"/opt/mydir/lib/MyFol/mytest.jar"
我已经阅读了其他类似的问题并确保了这一点
/opt/mydir/lib/MyFol/和文件mytest.jar具有所有权限我在Linux上使用OpenJDK.
在Linux机器上的上述代码的实际问题是双引号,正如Robin Green在帖子中所述,他是对的.
但是当路径包含空格或其他参数之间有空格时,我无法运行jar.
为此,我不得不尝试其他方式加载罐子,这可以在两个平台上无缝地工作,并且还有空间的问题.在这种情况下,
Process Builder开始营救.
ProcessBuilder pb = new ProcessBuilder("java", "-jar", _JarPath, args[0], args[1], args[2], args[3]);
Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)
在所有情况下,这在没有任何探针的平台上都能正常工作.
编辑
OOPS是一个简单的解决方案,但我没有得到它,感谢Ingo 发布的评论,我们可以通过使用另一个重载函数传递参数exec
Runtime r = Runtime.getRuntime();
Process p =null;
String[] cmdarray = new String[7];
cmdarray[0] = "java";
cmdarray[1] = "-jar";
cmdarray[2] = _JarPath;
cmdarray[3] = args[0];
cmdarray[4] = args[1];
cmdarray[5] = args[2];
cmdarray[6] = args[3];
p = r.exec(cmdarray);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1606 次 |
| 最近记录: |