Java SE6.0调用Java编译器的两种新方法

http://tech.ddvip.com   2007年07月04日    社区交流

内容摘要:使用Java API来编译Java源程序有很多方法,现在让我们来看一种最简单的方法,通过JavaCompiler进行编译。

import java.io.*;
import javax.tools.*;
public class test_compilerapi
{
 public static void main(String args[]) throws IOException
 {
  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
  int results = compiler.run(null, null, null, "test.java");
  System.out.println((results == 0)?"编译成功":"编译失败");
  // 在程序中运行test
  Runtime run = Runtime.getRuntime();
  Process p = run.exec("java test");
  BufferedInputStream in = new BufferedInputStream(p.getInputStream());
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String s;
  while ((s = br.readLine()) != null)
   System.out.println(s);
 }
}
public class test
{
 public static void main(String[] args) throws Exception
 {
  System.out.println("JavaCompiler测试成功!");
 }
}

  编译成功的输出结果:

  编译成功

  JavaCompiler测试成功

  编译失败的输出结果:

符号: 方法 printlnln(java.lang.String)
位置: 类 java.io.PrintStream
System.out.printlnln("JavaCompiler测试成功!");
^
1 错误
编译失败

  test.java:9: 找不到符号

  二、使用StandardJavaFileManager编译Java源程序

  在第一部分我们讨论调用java编译器的最容易的方法。这种方法可以很好地工作,但它确不能更有效地得到我们所需要的信息,如标准的输入、输出信息。而在Java SE6中最好的方法是使用StandardJavaFileManager类。这个类可以很好地控制输入、输出,并且可以通过DiagnosticListener得到诊断信息,而DiagnosticCollector类就是listener的实现。

责编:豆豆技术应用

正在加载评论...