【问题标题】:Java Compiler run() methodJava 编译器 run() 方法
【发布时间】:2012-07-24 08:20:31
【问题描述】:

我在网上找到了这段关于 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?有人可以解释一下吗?

【问题讨论】:

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


    【解决方案1】:

    Javadoc 是 here

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

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

    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 启动时由操作系统设置的。您可以将它们通过管道传输到文件,或者它们只是写入(读取)控制台。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          • 2016-04-13
          • 2011-03-03
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多