Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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
g++;不';我不能使用Java_Java_Processbuilder - Fatal编程技术网

g++;不';我不能使用Java

g++;不';我不能使用Java,java,processbuilder,Java,Processbuilder,我正在编写用于编译程序的Java代码 因此,用户可以选择要编译的文件,然后程序由自己的g++运行 在网上,特别是StackOverFlow,我决定使用以下代码: //Set a FileChoose called fc, got the file path (filePath) and the directory path (dirPath), then: ProcessBuilder process=null; try { process = new ProcessBuilder("g

我正在编写用于编译程序的Java代码

因此,用户可以选择要编译的文件,然后程序由自己的g++运行

在网上,特别是StackOverFlow,我决定使用以下代码:

//Set a FileChoose called fc, got the file path (filePath) and the directory path (dirPath), then:
ProcessBuilder process=null;
try {
    process = new ProcessBuilder("g++", filePath, " -o "+dirPath+"/a.out").start();
} catch (IOException ex) {
    System.err.println("Error compiling file");
    Logger.getLogger(Nuovo.class.getName()).log(Level.SEVERE, null, ex);
    System.exit(0);
}
关键是它不会返回任何错误,当我检查文件是否编译时,什么都没有

有什么想法吗


多谢各位

我建议您阅读程序的输出,看看它产生了什么错误

我猜它会这样说

File not found:  -o dir/a.out
注意,您已经指定了
“-o”+dirPath+“/a.out”
是单个参数。这就像写作

g++ $filePath ' -o dir/a.out'
也许你的意图是

new ProcessBuilder("g++", filePath, "-o", dirPath+"/a.out").start();

为什么Java不像shell那样解析您的参数?因为它把这个参数传递给系统调用<代码> Exc> <代码>,所以它真的不做C++所不能做的任何事情。

< P>我建议你读程序的输出,看看它产生了什么错误。 我猜它会这样说

File not found:  -o dir/a.out
注意,您已经指定了
“-o”+dirPath+“/a.out”
是单个参数。这就像写作

g++ $filePath ' -o dir/a.out'
也许你的意图是

new ProcessBuilder("g++", filePath, "-o", dirPath+"/a.out").start();

为什么Java不像shell那样解析您的参数?因为它将参数传递给系统调用<代码> Exc> /Cord>,所以它确实不做C++所不能做的任何事情。java process exec没有几个主要的漏洞:如果本机命令向您发送消息,java进程将不会解析消息,并且还会阻止java程序的执行

例如:

  • 您可以从java调用以下命令:del
  • 系统将向您返回一条确认消息:您确定(是/否)
  • java ProcessBuilder不会解析确认消息,它会阻止程序的执行

出于这个原因,我推荐apache commons exec库,它也有很好的文档。

您应该使用位于以下位置的apache commons exec库:。java process exec没有几个主要的漏洞:如果本机命令向您发送消息,java进程将不会解析消息,并且还会阻止java程序的执行

例如:

  • 您可以从java调用以下命令:del
  • 系统将向您返回一条确认消息:您确定(是/否)
  • java ProcessBuilder不会解析确认消息,它会阻止程序的执行

出于这个原因,我推荐apache commons exec库,它也有很好的文档。

阅读进程的错误流,以获取更多信息此代码无法编译
ProcessBuilder.start()
返回一个
进程
,但您将其分配给
ProcessBuilder
的变量。很抱歉之前没有回复,我最近有点忙。关键是没有任何错误。正如@jornverne所说的,问题是我正在将一个进程返回给一个ProcessBuilder。我是这样解决的:过程公关;Runtime rt=Runtime.getRuntime();请尝试{pr=rt.exec(String[]);}catch(IOException e){},其中exec()函数的参数是一个字符串数组,其中包含{“bin/bash”、“-c”、com等内容(取决于需要),并}读取进程的错误流,以获取更多信息此代码不会编译
ProcessBuilder.start()
返回一个
进程
,但您将其分配给
ProcessBuilder
的变量。很抱歉之前没有回复,我最近有点忙。关键是没有任何错误。正如@jornverne所说的,问题是我正在将一个进程返回给一个ProcessBuilder。我是这样解决的:过程公关;Runtime rt=Runtime.getRuntime();请尝试{pr=rt.exec(String[]);}catch(IOException e){},其中exec()函数的参数是一个字符串数组,其中包含{“bin/bash”、“-c”、comand}等内容(取决于需要)