1

我正在制作一个项目,它将在运行时编译 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);
4

1 回答 1

2

JavaDocgetSystemJavaCompiler()

返回: 此平台提供的编译器;如果没有提供编译器,则返回 null

不存在系统编译器的最可能原因是您在不提供编译器的 JRE(Java 运行时环境)中执行程序。尝试改用 JDK(Java 开发工具包)环境。

于 2013-03-30T21:17:29.900 回答