我在网上找到了关于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.in
,System.out
和System.err
。但是这些值实际上做了什么,因为我找不到这些的API?有人可以解释一下吗?
答案 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 方法。