Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java编译器项目_Java_Compiler Construction_Compilation_Nullpointerexception - Fatal编程技术网

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>

我正在做一个项目,它将在运行时编译Java源文件

我遇到的问题是
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添加到生成路径中,只是不确定如何对任何版本执行此操作。