【发布时间】:2013-08-10 06:30:18
【问题描述】:
以下是用eclipse ide编写的Java代码...
package compile;
import java.io.IOException;
import java.util.Arrays;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
public class Execute {
public static void main(String args[]) throws IOException, ClassNotFoundException {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
diagnostics, null, null);
Iterable<? extends JavaFileObject> compilationUnits = fileManager
.getJavaFileObjectsFromStrings(Arrays
.asList("F:\\practice java\\project\\KeepingMoreKidsQuiet.java"));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
diagnostics, null, null, compilationUnits);
boolean success = task.call();
System.out.println(success);
if(!success)
System.out.println(diagnostics.getDiagnostics());
fileManager.close();
}
}
当我运行我的 Java 程序时,它在这一行给我一个错误
StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null);
我得到的错误是:
线程“main”中的异常 java.lang.NullPointerException 在 compile.Execute.main(Execute.java:17)
你能告诉我如何解决这个错误吗?
【问题讨论】:
-
编译器为空?来自 ToolProvider.getSystemJavaCompiler() 的 api 文档“此平台提供的编译器,如果没有提供编译器,则为 null”
-
您是否使用调试器单步执行?您可以看到哪个对象为空,并试图找出原因。我的赌注是
ToolProvider.getSystemJavaCompiler();返回null,但请确保。