Java编译器项目

标签 java compiler-construction compilation nullpointerexception

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

最佳答案

来自JavaDoc getSystemJavaCompiler() 的:

Returns: the compiler provided with this platform or null if no compiler is provided

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

关于Java编译器项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15723504/

相关文章:

java - 堆插入方法中的双项

c++ - 将终端的输入/输出重定向到 iOS JB 中的 gui

c - GCC 相关搜索目录

java - 如何从字符串上下文创建java类文件

java - 从命令行运行java项目

java - 如何断言 map 包含带有条目的 map

java - Android MediaPlayer 声音延迟

java - 从java调用jsp或javascript

c++ - Visual Studio 2010 C++ 编译器为类分配了错误的大小

assembly - 在x86机器上减去 `x`和添加 `-x`有什么区别?