使用JavaCompiler编译java文件,
总是在Compiler.java的compilationResult=compiler.run(null, null, err, fullQuanlifiedFileName)的这一行报错,不知道为什么?//Target.java
import java.util.Data;public class Target{
public void dosomething(){
Date date=new Date(10,3,3);
System.out.println("Done..");
}
}//Compiler.java
import javax.tools.*;
import java.io.FileOutputStream;public class Compiler {
public static void main(String[] args) throws Exception {
String fullQuanlifiedFileName = "E:/Target.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); FileOutputStream err = new FileOutputStream("E:/err.txt"); int compilationResult = 0;
compilationResult=compiler.run(null, null, err, fullQuanlifiedFileName); if(compilationResult == 0){
System.out.println("Done");
} else {
System.out.println("Fail");
}
}
}
总是在Compiler.java的compilationResult=compiler.run(null, null, err, fullQuanlifiedFileName)的这一行报错,不知道为什么?//Target.java
import java.util.Data;public class Target{
public void dosomething(){
Date date=new Date(10,3,3);
System.out.println("Done..");
}
}//Compiler.java
import javax.tools.*;
import java.io.FileOutputStream;public class Compiler {
public static void main(String[] args) throws Exception {
String fullQuanlifiedFileName = "E:/Target.java";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); FileOutputStream err = new FileOutputStream("E:/err.txt"); int compilationResult = 0;
compilationResult=compiler.run(null, null, err, fullQuanlifiedFileName); if(compilationResult == 0){
System.out.println("Done");
} else {
System.out.println("Fail");
}
}
}
debug看一下吧
哪里搞得JavaCompiler类?
这个没取到你想取到的,为null~
这行代码是去获得编译器对象 ,这个编译器类名: com.sun.tools.javac.api.JavacTool, 是在tools.jar 包里面 加载的时候,先搜索classpath然后用urlclassloader搜索但是因为这个jar不在classpath里面 而且也不在运行这个程序的jre的lib里面所以找不到 返回null解决方法很简单 把 你的 %JAVA_HOME%\lib\tools.jar 这个jar包
放到 运行java的jre下面,一般是在 C:\Program Files\Java\jre1.6.0下面 就可以l
另外一个方法 直接把tools.jar加到Classpath里面
你自己在eclipse下调试一下执行过程就知道到底是哪个变量为null了,不是么
File[] files1 = {new File("E:\\yikatong\\ecard\\src\\ECardFrame.java"),new File("E:\\yikatong\\ecard\\src\\ECardApplication.java")};//指定要编译的类
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); Iterable<? extends JavaFileObject> compilationUnits1 =
fileManager.getJavaFileObjectsFromFiles(Arrays.asList(files1));
compiler.getTask(null, fileManager, null, null, null, compilationUnits1).call();
fileManager.close();
FileInputStream in=new FileOutputStream("E:/in.txt");
FileOutputStream out = new FileOutputStream("E:/out.txt");run(in,out,err,fullQuanlifiedFileName);调用之后,Target.java的输出字符串不是输出到E:/out.txt;而且也不是输出到控制台上呢?