Java编译器项目
我正在做一个项目,它将在运行时编译Java源文件 我遇到的问题是Java编译器项目,java,compiler-construction,compilation,nullpointerexception,Java,Compiler Construction,Compilation,Nullpointerexception,我正在做一个项目,它将在运行时编译Java源文件 我遇到的问题是StandardJavaFileManager fileManager=compiler.getStandardFileManager(诊断,null,null)行抛出NullPointerException 有人能帮我修一下吗 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); DiagnosticCollector<JavaFileObject>
StandardJavaFileManager fileManager=compiler.getStandardFileManager(诊断,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);
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();
DiagnosticCollector diagnostics=新建DiagnosticCollector();
StandardJavaFileManager文件管理器=编译器.getStandardFileManager(
诊断,空,空);
System.out.println(“搜索脚本…”);
File[]javaFiles=src.listFiles(新文件名过滤器(){
公共布尔接受(文件src,字符串名){
返回name.toLowerCase().endsWith(“.java”);
}
});
Iterable来自getSystemJavaCompiler()
:
返回:
此平台提供的编译器,如果未提供编译器,则为null
不存在系统编译器的最可能原因是,您正在JRE(Java运行时环境)中执行程序,而JRE不提供编译器。尝试改用JDK(Java开发工具包)环境。发布完整的stacktrace。当2/3个参数为null时,NPE可能会被抛出也就不足为奇了…@dantuch,他设置为null的参数是允许的。来自ToolProvider.getSystemJavaCompiler()的Javadoc
:**返回:**此平台提供的编译器,如果未提供编译器,则返回null
。这可能就是问题所在-ToolProvider
不太可靠,即使您知道系统上有编译器,ToolProvider
也找不到它,并返回null
。另请参见&specified。它使用JavaCompiler
API&源代码随附。啊,我认为你是正确的,因为我在eclipse中运行它,并且没有更改该设置!如果我想让它适用于任何安装了JDK的机器,我需要编辑构建路径还是什么?@Ciphor在eclipse中,您有一些.cfg或.ini文件,其中指定了java路径。将其更改为指向JDK。@dantuch如果我将其用于在许多机器上支持此功能的任何版本的JDK,则无法解决我的问题。我已经知道如何将特定的JDK添加到生成路径中,只是不确定如何对任何版本执行此操作。