我有一个奇怪的未知行为出现。在我的应用程序中,我需要启动一个Java进程来执行某些任务。所以在执行以下操作时:
1a) String[] ls = {"cmd",
"/C",
"\"C:\\t e m p\\run time\\jre\\bin\\java.exe\"",
"-jar",
"Canon.jar"};
ProcessBuilder p = new ProcessBuilder(ls);
p.redirectErrorStream();
Process pp = p.start();
上述方法是完美的。但是,如果
Canon.jar
的完整路径包含空格,则无法正常工作。基本上,我需要在Canon.jar
路径周围添加引号
。例如:1b) String[] ls = {"cmd","/C",
"\"C:\\Prac\\t e m p\\run time\\jre\\bin\\java.exe\"","-jar",
"\"C:\\Prac\\t e m p\\Canon.jar\""};
即使包含引号,上述方法仍然无法正常工作。它会显示以下信息:
“结束'C:\ Users \ Jatin \ Documents \ Prac \ t'不被视为内部或外部命令、可操作程序或批处理文件。”
最大的问题是,下面的方法也无法正常工作:
1c) String[] ls = {"cmd","/C",
"\"C:\\Prac\\t e m p\\run time\\jre\\bin\\java.exe\"","-jar",
"\"C:\\Prac\\temp\\Canon.jar\""};//contains no white space.
仍然显示相同的错误。当指向Canon.jar
的路径不包含空格时,它怎么可能再次出现呢?为什么在1a
可用的情况下会提示java.exe
路径存在问题。
\\t
中的\t
被转义为制表符字符了?只是猜测。 - Roger Rowland1c
中,如果它能在1a
中工作,为什么会在1c
中失败,这正是我的观点。 - Jatin1a
中没有错误。 - Jatin