Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.jar文件路径中的空格从Java运行Java应用程序_Java - Fatal编程技术网

使用.jar文件路径中的空格从Java运行Java应用程序

使用.jar文件路径中的空格从Java运行Java应用程序,java,Java,我试图在Java应用程序中运行Java CUP(LEX/YACC解析器的Java版本) 这是我的代码(我从互联网上复制了大部分代码): 当我在Win7的命令提示符下运行这个命令时(不跳过反斜杠和双引号),它就会被执行。如果我在“-jar”之后注释掉所有内容,我会得到java选项(这是预期的,因为该命令是非法的),因此我知道它可以运行 我的猜测是,通过带有空格的路径才是问题所在。我尝试使用字符串[],但得到了相同的结果。转义空格也会导致错误 有人知道我如何解决这个问题吗 谢谢。看起来您缺少jar路

我试图在Java应用程序中运行Java CUP(LEX/YACC解析器的Java版本)

这是我的代码(我从互联网上复制了大部分代码):

当我在Win7的命令提示符下运行这个命令时(不跳过反斜杠和双引号),它就会被执行。如果我在“-jar”之后注释掉所有内容,我会得到java选项(这是预期的,因为该命令是非法的),因此我知道它可以运行

我的猜测是,通过带有空格的路径才是问题所在。我尝试使用字符串[],但得到了相同的结果。转义空格也会导致错误

有人知道我如何解决这个问题吗


谢谢。

看起来您缺少jar路径中的第一个反斜杠:

String command  = "java " +
                  "-jar " +
                  "\"g:My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\Inputs\\Parser\\java-cup-11a.jar\" " +
应该是

String command  = "java " +
                  "-jar " +
                  "\"g:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\Inputs\\Parser\\java-cup-11a.jar\" " +
                       ^^

Edit:millimoose指出它不使用shell来调用,所以我查看了文档,它显然只使用了一个来拆分空格。Java将拆分您的命令参数,即使它们用双引号括起来。因此,除了修复上面的反斜杠问题外,还需要使用接受
字符串[]
的形式。并且不需要双引号引用包含空格的参数

String[] command = new String[] {
                       "java",
                       "-jar",
                       "g:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\Inputs\\Parser\\java-cup-11a.jar",
                       "-destdir",
                       "g:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\src\\Assembler",
                       "G:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\Inputs\\Assembler\\Assembler.cup",
                   };

Process p = Runtime.getRuntime().exec(command);

您缺少反斜杠(
g:My Documents
)。我手头没有Windows来测试这是否合法,但我认为不合法。我不确定在使用
Runtime.exec()
时是否有必要包含转义引号,因为它不通过shell。)@millimoose啊!谢谢,我不知道。事实上,[Runtime#exec(String)](显然只是使用StringTokenizer分割命令字符串,所以OP需要使用[Runtime#exec(String[])](取而代之的是。1.至于缺少的反斜杠,它在我所做的许多更改中被删除了。修复它没有任何作用。2.没有转义引号,我得到了一个“null”异常。3.从一个字符串切换到字符串数组时没有任何更改。第一个参数中的反斜杠在粘贴所有副本时被意外删除。添加它可以吗esn不能解决这个问题。使用字符串数组也不能解决这个问题(如原文章所述)。当使用只有一个字符串的数组时,我得到一个错误,表明无法找到指定的文件,这比以前的尝试要好得多。好的。你能发布你当时得到的错误的stacktrace吗?显然我没有输出,但我需要的文件仍然被创建了。啊,奇怪。很高兴它现在可以工作了。也许进程输出如此关于错误流的方法?这是一个CUP编译,我相信它会在标准数据流上输出。我会检查标准数据。
String[] command = new String[] {
                       "java",
                       "-jar",
                       "g:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\Inputs\\Parser\\java-cup-11a.jar",
                       "-destdir",
                       "g:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\src\\Assembler",
                       "G:\\My Documents\\Dropbox\\Final Project\\Code\\Mano CPU\\Inputs\\Assembler\\Assembler.cup",
                   };

Process p = Runtime.getRuntime().exec(command);