无法从Linux平台上的另一个jar使用java Runtime访问jarfile

dbw*_*dbw 1 java linux jar

我正在尝试使用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"

我已经阅读了其他类似的问题并确保了这一点

  1. 目录/opt/mydir/lib/MyFol/和文件mytest.jar具有所有权限
  2. 启动此进程命令的可执行jar也具有所有权限.
  3. linux上的用户也是管理员

我在Linux上使用OpenJDK.

dbw*_*dbw 5

在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)