【发布时间】:2013-03-30 21:08:35
【问题描述】:
我正在制作一个运行时会编译 Java 源文件的项目。
我遇到的问题是 StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); 行抛出 NullPointerException。
谁能帮忙解决这个问题?
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(
diagnostics, null, null);
System.out.println("Searching for scripts...");
File[] javaFiles = src.listFiles(new FilenameFilter() {
public boolean accept(File src, String name) {
return name.toLowerCase().endsWith(".java");
}
});
Iterable<? extends JavaFileObject> compilationUnits = fileManager
.getJavaFileObjectsFromFiles(Arrays.asList(javaFiles));
JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager,
diagnostics, null, null, compilationUnits);
【问题讨论】:
-
发布完整的堆栈跟踪。
-
当 2/3 参数为空时,NPE 可能会被抛出也就不足为奇了......
-
@dantuch,他设置为null的参数是允许的。
-
来自
ToolProvider.getSystemJavaCompiler()的Javadoc:**Returns:** the compiler provided with this platform or null if no compiler is provided。这可能是问题所在 -ToolProvider不是很可靠,即使您知道您的系统上有编译器,ToolProvider也找不到它并返回null. -
另见STBC & 特别是(Class-path) Configuration。它使用
JavaCompilerAPI & 自带源码。
标签: java compiler-construction compilation nullpointerexception