g ++不能与Java一起工作

问题描述:

我正在研究用于编译程序的Java代码。g ++不能与Java一起工作

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

找上了网,尤其是计算器,我已经决定要使用此代码:

//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); 
} 

的一点是,它不返回任何错误,当我检查,如果该文件编译没有什么。

有什么想法?

非常感谢!

+3

阅读您的过程的错误流,以获取更多信息 – Jens

+5

此代码不编译。 'ProcessBuilder.start()'返回一个'Process',但是你把它赋给一个变量'ProcessBuilder'。 –

+0

对不起之前没有回复,我一直有点忙。 问题是没有任何错误。 正如@JornVernee所说的问题是我正在将一个Process返回给ProcessBuilder。我通过这种方式解决了这个问题:Process pr; 运行时rt = Runtime.getRuntime(); try { pr = rt。exec(String []);如果exec()函数的参数是一个包含某些东西(取决于需要)的字符串数组,如{“bin/bash”,“-c”,comand} – icosac

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

我的猜测是这样的。

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的行为像一个贝壳和分析你的论点?因为它将参数传递给系统调用exec,因此它不会执行任何C++不会执行的操作。

您应该使用位于:https://commons.apache.org/proper/commons-exec/download_exec.cgi的apache commons exec库。 java进程exec没有太大的差距:如果本地命令给你发送消息,java进程将不会解析消息,并且会阻塞java程序的执行。

例如:

  • 您从Java调用以下命令:del
  • 系统会给您发回确认信息:您确定(是/否)?
  • java ProcessBuilder不会解析确认消息,它会阻止程序的执行。

因此,我推荐apache commons exec库,它也有一个很好的文档https://commons.apache.org/proper/commons-exec/tutorial.html