g++;不';我不能使用Java
我正在编写用于编译程序的Java代码 因此,用户可以选择要编译的文件,然后程序由自己的g++运行 在网上,特别是StackOverFlow,我决定使用以下代码: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
//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}等内容(取决于需要)