Java Compiler run()方法

时间:2012-07-24 08:20:31

标签: java api compiler-construction compilation java-compiler-api

我在网上找到了关于JavaCompiler的代码

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int result = compiler.run(null, null, null,
             "src/org/kodejava/example/tools/Hello.java");

它为compiler.run(null, null, null表示这三个空值分别是默认的System.inSystem.outSystem.err。但是这些值实际上做了什么,因为我找不到这些的API?有人可以解释一下吗?

3 个答案:

答案 0 :(得分:6)

Javadoc是here

  

int run(InputStream in,           OutputStream输出,           OutputStream错误,           字符串...参数)

     

使用给定的I / O通道和参数运行该工具。按照惯例,工具返回0表示成功,非零表示错误。任何   生成的诊断信息将写入某些输出或错误   未指明的格式。

Parameters:
    in - "standard" input; use System.in if null
    out - "standard" output; use System.out if null
    err - "standard" error; use System.err if null
    arguments - arguments to pass to the tool 
Returns:
    0 for success; nonzero otherwise

对于System.in,System.out和System.err,这些是全局流(默认情况下)连接到STDIN,STDERR和STDOUT。这三个是在JVM启动时由操作系统设置的。您可以将它们传输到文件,或者只是写入(从中读取)控制台。

在这种情况下,您将使用参数来检查程序的编译器输出(而不是仅将其发送给用户)。这就是“以某种未指定格式写出的诊断”的地方。

答案 1 :(得分:1)

您可以指定自己的流,而不是依赖于标准的系统流。例如,如果要将输出重定向到某个文件,可以创建文件输出流,然后传递给#run调用。

答案 2 :(得分:1)

JavaCompiler是 javax.tools.JavaCompiler ,它实现了 javax.tools.Tool 接口,请参阅javadoc for javax.tools.Tool#run 方法。