g++ 不适用于 Java
g++ doesn't work with Java
我正在编写 Java 程序编译代码。
所以用户可以选择要编译的文件,然后程序自己g++运行。
在网上查看,特别是 Whosebug,我决定使用以下代码:
//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);
}
重点是它 return 没有任何错误,当我检查文件是否已编译时,什么也没有。
有什么想法吗?
非常感谢!
我建议你阅读程序的输出,看看它产生了什么错误。
我猜它会说类似的话。
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 那样解析你的论点?因为它将参数传递给系统调用 exec
所以它实际上没有做任何 C++ 不会做的事情。
您应该使用位于 https://commons.apache.org/proper/commons-exec/download_exec.cgi 的 apache commons exec 库。 java 进程 exec 有一些主要的缺陷:如果本机命令向您发送消息,java 进程将不会解析该消息,并且还会阻止 java 程序的执行。
示例:
- 您从 java 调用以下命令:del .
- 系统会发回确认信息:Are you sure (Y/N)?
- javaProcessBuilder 不会解析确认消息,它会阻止程序的执行。
出于这个原因,我推荐 apache commons exec 库,它也有很好的文档 https://commons.apache.org/proper/commons-exec/tutorial.html。
我正在编写 Java 程序编译代码。
所以用户可以选择要编译的文件,然后程序自己g++运行。
在网上查看,特别是 Whosebug,我决定使用以下代码:
//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);
}
重点是它 return 没有任何错误,当我检查文件是否已编译时,什么也没有。
有什么想法吗?
非常感谢!
我建议你阅读程序的输出,看看它产生了什么错误。
我猜它会说类似的话。
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 那样解析你的论点?因为它将参数传递给系统调用 exec
所以它实际上没有做任何 C++ 不会做的事情。
您应该使用位于 https://commons.apache.org/proper/commons-exec/download_exec.cgi 的 apache commons exec 库。 java 进程 exec 有一些主要的缺陷:如果本机命令向您发送消息,java 进程将不会解析该消息,并且还会阻止 java 程序的执行。
示例:
- 您从 java 调用以下命令:del .
- 系统会发回确认信息:Are you sure (Y/N)?
- javaProcessBuilder 不会解析确认消息,它会阻止程序的执行。
出于这个原因,我推荐 apache commons exec 库,它也有很好的文档 https://commons.apache.org/proper/commons-exec/tutorial.html。